使用Ember Simple Auth访问用户的帐户信息

时间:2014-05-07 20:29:10

标签: ember.js ember-simple-auth

我在我的应用程序中使用ember-simple-auth并且它运行良好,但我希望能够在UI中显示当前用户的属性(例如电子邮件或名称) 。在过去,我已经使用应用程序初始化程序来执行此操作,并且基本上使用currentUser注入所有控制器,但这需要在应用程序初始化时知道​​当前用户。由于我使用OAuth,因此在加载应用程序时不知道用户。

有没有办法从当前登录的用户获取属性?

1 个答案:

答案 0 :(得分:7)

原来我使用的ember-simple-auth版本已经过时,需要升级到0.3.x(从0.2.x开始)。从那里,我能够添加一个自定义身份验证器,我几乎直接从项目的示例文件中提取。请注意,我在Ember 1.6.0 beta 2上。

使用下面的代码,我可以使用this.get('session.currentUser')或使用{{session.currentUser}}的模板访问路径和控制器中的currentUser。

我必须对API进行的唯一更改是将user_id包含在OAuth响应中。

从上一个支持0.4.0

的答案更新

然后我将初始化程序更新为以下内容:

App.initializer({
  name: 'authentication',

  initialize: function(container, application) {
    Ember.SimpleAuth.Authenticators.OAuth2.reopen({
      serverTokenEndpoint: '/api/oauth/token'
    });

    Ember.SimpleAuth.Session.reopen({
      currentUser: function() {
        var userId = this.get('user_id');
        if (!Ember.isEmpty(userId)) {
          return container.lookup('store:main').find('current-user', userId);
        }
      }.property('user_id')
    });

    Ember.SimpleAuth.setup(container, application, {
      authorizerFactory: 'ember-simple-auth-authorizer:oauth2-bearer',
      routeAfterAuthentication: 'main.dashboard'
    });
  }
});

我的登录控制器现在看起来像这样:

export default Ember.Controller.extend(Ember.SimpleAuth.LoginControllerMixin, {
  authenticatorFactory: 'ember-simple-auth-authenticator:oauth2-password-grant'
});