【问题标题】:EmberJS retrieve current user from ember-simple-auth authenticatorEmberJS 从 ember-simple-auth 身份验证器中检索当前用户
【发布时间】:2016-11-22 19:15:21
【问题描述】:

问题:

我正在尝试通过扩展 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。

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多