我在我的应用程序中使用ember-simple-auth并且它运行良好,但我希望能够在UI中显示当前用户的属性(例如电子邮件或名称) 。在过去,我已经使用应用程序初始化程序来执行此操作,并且基本上使用currentUser注入所有控制器,但这需要在应用程序初始化时知道当前用户。由于我使用OAuth,因此在加载应用程序时不知道用户。
有没有办法从当前登录的用户获取属性?
答案 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'
});