使用 Emberfire 登录后无法转换为当前用户

Trouble transitioning to current user after signing in with Emberfire

我正在使用 Emberfire 进行身份验证和数据库,我可以登录,但之后它不会将我重定向到我的当前用户页面。它还向我抛出一个错误,说自定义 url 中不存在用户,但我的 firebase 控制台显示用户具有我重定向到的正确 ID。

这是我的登录控制器:

import Ember from 'ember';

export default Ember.Route.extend({
  beforeModel: function() {
    return this.get('session').fetch().catch(function() {});
  },
  actions: {
    signIn: function() {
      var controller = this.get('controller');
      var email = controller.get('email');
      var password = controller.get('password');
      this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
        console.log(data.currentUser);
      });
      let uid = this.get('session').get('uid');
      this.store.findRecord('user', uid).then(user => {
      console.log(user.get('firstName'));
      this.transitionTo('user', uid);
});
    },
    signOut: function() {
      this.get('session').close();
    }
  }
});

这是我的路由器:

Router.map(function() {
  this.route('signup');
  this.route('home', { path: '/' });
  this.route('login');
  this.route('user', { path: '/user/:user_id' });
});

您必须等待身份验证完成。这就是 .then 的用途。在您当前的代码中,您在完成身份验证之前从 session 获取 uid

这应该有效:

    import Ember from 'ember';

    export default Ember.Route.extend({
      beforeModel: function() {
        return this.get('session').fetch().catch(function() {});
      },
      actions: {
        signIn: function() {
          var controller = this.get('controller');
          var email = controller.get('email');
          var password = controller.get('password');
          var self = this;
          this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
            console.log(data.currentUser);
            let uid = this.get('session').get('uid');
            this.store.findRecord('user', uid).then(user => {
            console.log(user.get('firstName'));
            self.transitionTo('user', uid);
          });

    });
        },
    signOut: function() {
      this.get('session').close();
    }
  }
});