EmberJS 从 ember-simple-auth 验证器中检索当前用户

EmberJS retrieve current user from ember-simple-auth authenticator

问题:

我正在尝试通过扩展 ember-simple-auth/authenticators/base 来检索从 ember-simple-auth 登录的当前用户。我只想创建一个名为 currentUser() 的函数,它将 return 用户名但是每当我尝试调用该函数时我都会收到错误消息:

Uncaught TypeError: this.get(...).currentUser is not a function(…)

尝试:

函数currentUser()定义如下:

// app/authenticators/oauth2.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';

const RSVP = Ember.RSVP;

export default Base.extend({
  restore() {
      // restore user session
  },
  currentUser() {
      return this.get("username");
  }),
  authenticate(username, password) {
    this.set('username', username);
    return new RSVP.Promise((resolve, reject) => {
      Ember.$.ajax({
        url: config.baseURL + "accounts/login",
        data: {
          username: username,
          password: password
        },
        type: 'POST',
        dataType: 'json',
        contentType: 'application/x-www-form-urlencoded',
        complete: (response)=> {
          if (response.responseJSON.isAuthenticated)
            resolve({isAuthenticated: true});
          else
            reject("Wrong credentials.");
        }
      });
    });
  },
  invalidate() {
    // log out
  }
});

我调用函数使用:

// app/controllers/application.js
import Ember from 'ember';

export default Ember.Controller.extend({
  session: Ember.inject.service('session'),

  actions: {
    alertSession() {
      console.log("!! " + this.get('session').currentUser());
    },
    invalidateSession() {
      this.get('session').invalidate();
      this.transitionToRoute('login');
    }
  }
});

this.get('session').invalidate();有效,但this.get('session').currentUser();会return出现上述错误。 请让我知道如何解决这个问题。 另外,我正在使用 Ember 2.5.1.

谢谢!

在您的应用程序控制器中,您从 session 服务调用 currentUser(),而您在 中定义了 currentUser() oauth2.js 验证器。执行可能会失败,因为您没有修改 session 服务以引用您的身份验证器的 currentUser 函数。

另一个函数成功执行,因为 session 服务具有调用指定身份验证器的 invalidate() 函数所需的引用。

您可以考虑使用 ember-simple-auth 对 Managing a Current User 的建议。有了这个,您可以探索一个解决方案,该解决方案利用与 session 服务一起工作的隔离 currentUser 服务。