我有Ember-simple-auth的经典设置,在ApplicationRoute中我使用
model: function () {
return Ember.RSVP.hash({
user: this.store.find('gsUser').then(function(data) {
return data.get('content')[0]
})
});
},
setupController: function(controller, model) {
this.controllerFor('user').set('content', model.user);
}
当用户失去授权时,您打开该页面。首先触发ApplicationRoute :: model,服务器返回401并停止其他执行。
GET http://localhost:8000/app_dev.php/api/1/users.json 401 (Unauthorized)
Error while loading route: undefined
只有在身份验证成功时才应该触发 model
。
我看到有sessionAuthenticationSucceeded
但是我已经尝试了所有的方式来听它,没有人工作。如何在用户成功通过身份验证后收听此事件并从服务器获取数据?
11/06 22:57更新:enter code here
我已经设法实现的这个问题的一个解决方案,但似乎完全没有尴尬:
App.ApplicationRoute = Ember.Route.extend(Ember.SimpleAuth.ApplicationRouteMixin, {
skipModelLoading: false,
beforeModel: function() {
this.set('skipModelLoading', !this.get('session').get('isAuthenticated'));
},
model: function () {
if (this.get('skipModelLoading')) {
return;
}
return Ember.RSVP.hash({
user: this.store.find('gsUser').then(function(data) {
return data.get('content')[0]
})
});
},
setupController: function(controller, model) {
if (this.get('skipModelLoading')) {
return;
}
this.controllerFor('user').set('content', model.user);
}
});
答案 0 :(得分:1)
我假设您正在使用model
方法加载经过身份验证的用户。我会以不同的方式执行此操作并将该属性附加到会话中,如下例所示:https://github.com/simplabs/ember-simple-auth/blob/master/examples/4-authenticated-account.html#L101
答案 1 :(得分:1)
我认为我为我的问题找到了一个更加尴尬的解决方案:
App.ApplicationRoute = Ember.Route.extend(Ember.SimpleAuth.ApplicationRouteMixin, {
onSessionIsAuthenticated: function () {
var isAuthenticated = this.get('session').get('isAuthenticated');
if (!isAuthenticated) {
return false;
}
var userController = this.controllerFor('user');
return Ember.RSVP.hash({
user: this.store.find('gsUser').then(function (data) {
userController.set('content', data.get('content')[0]);
})
});
}.observes('session.isAuthenticated').on('init')
});