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

时间:2016-11-22 19:15:21

标签: javascript authentication ember.js ember-data ember-simple-auth

问题:

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

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();会返回上述错误。 请让我知道如何解决这个问题。 另外,我使用的是Ember 2.5.1。

谢谢!

1 个答案:

答案 0 :(得分:4)

在您的应用程序控制器中,当您在 oauth2.js 中定义currentUser()时,您正在通过会话服务致电currentUser()认证。执行可能失败,因为您尚未修改会话服务以引用您的身份验证器的currentUser功能。

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

您可以考虑对Managing a Current User使用ember-simple-auth的建议。有了这个,您可以探索利用孤立的 currentUser 服务的解决方案,该服务与会话服务结合使用。