在embercasts 的客户端身份验证中,有一个很好的方法来处理它:
基本上,您有一个App.AuthenticatedRoute
,所有需要身份验证的路由都将在其中扩展。在beforeModel
钩子中,检查用户是否已通过身份验证,在这种情况下是否存在令牌。如果令牌不存在,则存储当前转换。
App.AuthenticatedRoute = Ember.Route.extend({
...
beforeModel: function(transition) {
if (!this.controllerFor('login').get('token')) {
this.redirectToLogin(transition);
}
},
redirectToLogin: function(transition) {
alert('You must log in!');
var loginController = this.controllerFor('login');
loginController.set('attemptedTransition', transition);
this.transitionTo('login');
}
...
});
当登录被执行并且有效时,之前的转换被接受self.get('attemptedTransition')
,并被调用retry
。这将在登录身份验证重定向之前重试转换,在这种情况下,用户尝试转到的转换:
...
var attemptedTransition = self.get('attemptedTransition');
if (attemptedTransition) {
attemptedTransition.retry();
self.set('attemptedTransition', null);
} else {
// Redirect to 'articles' by default.
self.transitionToRoute('articles');
}
...
这样,您将具有相同的行为。
我希望它有所帮助。