I'm trying to use ember-simple-auth with a custom session. After logging in, when I try to access the session in a template, like so:
{{session.current_user.email}}
I get the following error:
Uncaught Error: Assertion Failed: Required contextualElement for view <Ember._HandlebarsBoundView:ember375> is missing
if I reload the page, the error goes away. Also, if I use an unbound helper, it goes away:
{{unbound session.current_user.email}}
I have the following code to set the current_user when the user_id changes:
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
};
What am I doing wrong?
Where would I put this code? An initializer? 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')
});
Then in the environment.js I set:
ENV['simple-auth'] = {
session: 'session:custom'
}
and in the initializer I register the custom session?
container.register('session:custom', Session);
Moved custom session to sessions/custom.js
. Still same error:
I would define a currentUser
method on the Session that returns the user as a promise:
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')
});
Also you should better define your own customer session class that extends from the Ember Simple Auth Session
class instead of reopening that.