我在我的应用程序中使用了ember-simple-auth,它运行良好,但我希望能够在 UI 中显示当前用户的属性(例如电子邮件或姓名)。过去,我使用应用程序初始化程序来执行此操作,并且基本上使用 currentUser 注入所有控制器,但这需要在初始化应用程序时知道当前用户。由于我使用的是 OAuth,因此在加载应用程序时不知道用户。
有没有办法从当前登录的用户那里获取属性?
我在我的应用程序中使用了ember-simple-auth,它运行良好,但我希望能够在 UI 中显示当前用户的属性(例如电子邮件或姓名)。过去,我使用应用程序初始化程序来执行此操作,并且基本上使用 currentUser 注入所有控制器,但这需要在初始化应用程序时知道当前用户。由于我使用的是 OAuth,因此在加载应用程序时不知道用户。
有没有办法从当前登录的用户那里获取属性?
原来我使用的 ember-simple-auth 版本已经过时,需要升级到 0.3.x(从 0.2.x)。从那里,我能够添加一个几乎直接从项目的示例文件中提取的自定义身份验证器。请注意,我使用的是 Ember 1.6.0 beta 2。
使用下面的代码,我可以使用在路由和控制器中this.get('session.currentUser')
或在模板中使用{{session.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'
});