我在我的ember-js应用程序中应用了ember-simple-auth-0.6.4.js,并且有一个案例,这很常见。这是一系列步骤。
问题是:如果在applicationRootUrl中定义的url - 在经过身份验证的路由下 - 登录页面将显示给用户,但在身份验证后用户再次转到applicationRootUrl,但不会转到最初发生ajax错误的页面。
我的解决方案:
在AuthenticatedRouteMixin beforeModel()钩子中我存储了最后一次转换:
Configuration.beforeInvalidationTransition = transition;
在ApplicationRouteMixin中,我重新定义了sessionInvalidatedSucceeded钩子:
sessionInvalidationSucceeded: function() {
if (Configuration.beforeInvalidationTransition) {
this.get(Configuration.sessionPropertyName)
.set('attemptedTransition',Configuration.beforeInvalidationTransition);
}
this.transitionTo(Configuration.authenticationRoute);
因此,如果发生401错误,用户被重定向到登录页面(Configuration.authenticationRoute)和发生错误的路由 - 存储到attemptTransition,因此在成功登录后,用户将被重定向到他停止工作的地方。
这个问题是否有意义还是有更优雅的解决方案?
答案 0 :(得分:1)
您实际上可以在不使用Configuration.beforeInvalidationTransition
的情况下立即在会话中存储最后一次转换。您也可以在访问令牌即将到期之前刷新,就像OAuth 2.0身份验证器那样(请参阅此处:https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth-oauth2/lib/simple-auth-oauth2/authenticators/oauth2.js#L167)