【问题标题】:Access user's account info with Ember Simple Auth使用 Ember 简单身份验证访问用户的帐户信息
【发布时间】:2014-05-07 20:29:09
【问题描述】:

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

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

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

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

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

    我必须对我的 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'
    });
    

    【讨论】:

    • 这绝对是黄金!几个月来,我一直在努力寻找使用 ember-simple-auth 执行此操作的好方法。这应该是文档的一部分(如果不是标准实现)。
    • @opsb 我刚刚更新了我的答案,因为在最近发布的 ember-simple-auth 之后可以进一步简化它。不再需要自定义身份验证器。
    • 不错,看起来确实更干净。
    • 我发现了一个从 currentUser 返回承诺的微妙问题,当进行像 session.get("currentUser") === task.get("user") 这样的比较时,它会失败(即使承诺已解决)。也许我打算使用 ember 特定的平等检查?因此,尽管我已经切换到在会话中使用观察者,它在用户加载时设置 currentUser,即gist.github.com/opsb/d3754a4541a120c92cad
    • opsb 您是否遇到过其他问题?我开始考虑设置道具。会话异步不好,因为应用程序的其余部分通常“期望”定义 currentUser 来做一些事情(比如在路由中返回相关模型)。
    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多