0

嗨,我正在使用 Ember 和 Firebase 制作一个应用程序,用户可以在其中创建一个新帐户,登录并且只有在他获得授权时才能看到有关他的帐户和一些受保护路由的信息。这样非授权用户只能看到 2 个路由:显示登录表单的索引 ('/') 和显示并允许他们创建新帐户的注册路由 ('/signup') 的链接。我的 app/router.js 路由器如下所示:

Router.map(function() {
  this.route('signup');
  this.route('index', {path: '/'}, function() {
    this.authenticatedRoute('index', {path: '/'});
    this.authenticatedRoute('events');
    this.authenticatedRoute('about');
  });
});

app/templates/index.hbs 包含登录表单,当用户登录嵌套索引路由时,它会被渲染,但它的模型钩子在刷新之前不会被调用。如何让它发挥作用?

应用程序/模板/index.hbs

{{#unless session.isAuthenticated}}

  {{signin-form store=store session=session authorized="authorized"}}

{{else}}

  {{#link-to 'index.index'  class="item"}}Home{{/link-to}}
  {{#link-to 'index.events' class="item"}}Events{{/link-to}}
  {{#link-to 'index.about'  class="item"}}About{{/link-to}}


  {{outlet}}

{{/unless}}

应用程序/路由/application.js

import Ember from 'ember';

export default Ember.Route.extend({
  beforeModel() {
    return this.get("session").fetch().catch(function() {});
  },
  actions: {
    signOut() {
      this.get('session').close();
      this.transitionTo('index');
    },
    accessDenied() {
      this.transitionTo('index');
    },
    authorized() {
      console.log('authorized');
      this.transitionTo('index');
    }
  }
});

应用程序/组件/signin-form.js

import Ember from 'ember';

export default Ember.Component.extend({
  didRender() {
    this._super(...arguments);
    this.$('form.ui.form').form();
  },

  signIn() {
    let { userPassword, userEmail }
      = this.getProperties('userPassword', 'userEmail');
    console.log('Logging with', userPassword, userEmail);
    this.get("session").open("firebase", { 
        provider: 'password',
        email: userEmail,
        password: userPassword
    }).then((data) => {
      console.log(data);
      this.sendAction('authorized');
    });
  },

  actions: {
    submit() {
      this.signIn();
    }
  }

});
4

1 回答 1

0

在 app/routes/application.js 我改变了

authorized() {
  this.transitionTo('index');
}

进入

authorized() {
  this.refresh();
}

现在它可以工作了。但总的来说,我仍然对这个解决方案持怀疑态度,所以如果你看到更好/余烬的方法,我会很高兴听到它。

于 2016-04-07T22:11:30.393 回答