我尝试将ember-simple-auth与自定义会话一起使用。登录后,当我尝试在模板中访问会话时,如下所示:
{{session.current_user.email}}
我收到以下错误:
Uncaught Error: Assertion Failed: Required contextualElement for view <Ember._HandlebarsBoundView:ember375> is missing
如果我重新加载页面,则错误消失。此外,如果我使用未绑定的帮助程序,它就会消失:
{{unbound session.current_user.email}}
我有以下代码在user_id更改时设置current_user:
import Session from 'simple-auth/session';
import Ember from 'ember';
export function initialize(container) {
Session.reopen({
setCurrentUser: function() {
var id = this.get('user_id');
var _this = this;
if(!Ember.isEmpty(id)) {
return container.lookup('store:main').find('user', id).then(function(user){
_this.set('current_user', user);
});
}
}.observes('user_id')
});
}
export default {
name: 'authentication',
before: 'simple-auth',
initialize: initialize
};
我做错了什么?
我会把这段代码放在哪里?初始化器? app/sessions/custom.js
?
export default Session.extend({
currentUser: function() {
var userId = this.get('user_id');
if (!Ember.isEmpty(userId)) {
return this.container.lookup('store:main').find('user', userId);
}
}.property('user_id')
});
然后在environment.js中设置:
ENV['simple-auth'] = {
session: 'session:custom'
}
在初始化程序中我注册了自定义会话?
container.register('session:custom', Session);
将自定义会话移至sessions/custom.js
。还是一样的错误:
答案 0 :(得分:1)
我会在Session上定义一个currentUser
方法,将用户作为一个承诺返回:
export default Session.extend({
currentUser: function() {
var userId = this.get('user_id');
if (!Ember.isEmpty(userId)) {
return this.container.lookup('store:main').find('user', userId);
}
}.property('user_id')
});
另外,您应该更好地定义自己的客户会话类,该类从Ember Simple Auth Session
类扩展而不是重新打开。
答案 1 :(得分:0)
与marcoow所说的类似,但我们使用的是承诺对象:
app/initializers/simple-auth-session.js
import Session from 'simple-auth/session';
import DS from 'ember-data';
export default {
name: 'simple-auth-custom-session',
before: 'simple-auth',
initialize: function(container) {
Session.reopen({
currentUser: function() {
return DS.PromiseObject.create({
promise: container.lookup('store:main').find('user', 'me')
});
}.property()
});
}
};