根据从服务器返回的响应,我有一条路线应该是AuthenticatedRouteMixin
或UnauthenticatedRouteMixin
。我如何实现这一点?根据条件,Ember simple-auth AuthenticatedRouteMixin或UnauthenticatedRouteMixin
目前,我有一个路线AuthenticatedRouteMixin
,我强制要通过重写我的beforeModel和执行willTransition操作进行身份验证和取消身份验证,如下所示。
beforeModel() {
this.set('session.isAuthenticated', true);
return this._super(...arguments);
}
而且
actions: {
willTransition: function(){
if (Ember.isEmpty(_this.get('session.data.authenticated.token')))
{
this.set('session.isAuthenticated', false);
}
}
}
然而,与此两个问题。
- 它看起来感觉不对。这可能有更好的方法来做 。
这有一些意想不到的后果。如果未登录然后尝试登录,用户需要在重定向到相应页面之前刷新页面。我研究了简单授权代码,并且transitionTo函数不按预期方式工作。
sessionAuthenticated() { const attemptedTransition = this.get('session.attemptedTransition'); if (attemptedTransition) { attemptedTransition.retry(); this.set('session.attemptedTransition', null); } else { this.transitionTo(Configuration.routeAfterAuthentication); } }
this.transitionTo(Configuration.routeAfterAuthentication);
是未转换的线。我已验证Configuration.routeAfterAuthentication
设置正确。
我可能会强制重新加载登录路径或用户导航到的路径,但(我认为)因为上述问题2,我正在运行到无限重定向。
我很乐意这样做如下:
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin';
const { service } = Ember.inject;
var mixin;
if (service('session').isAuthenticated){
mixin = AuthenticatedRouteMixin;
}
else{
mixin = UnauthenticatedRouteMixin;
}
export default Ember.Route.extend(mixin, { ... })
但是,我没有得到来自会话信息。我不确定,但也许需要加载特定的Ember.Route
才能获取该信息。
任何帮助将不胜感激。
更新
我可以强制重新加载在登录路由或者其它任何途径用户 导航到,但(我认为),因为上述问题2,我正在 到无限的重定向。
我想出了这部分。我只是在会话中设置一个键/值。如果它是真的,重新加载并移除该键或将其设置为false,所以重新加载只发生一次。
感谢力士。这对我不起作用。我可以像预期的那样看到会话更新,但'this.transitionTo(Configuration.routeIfAlreadyAuthenticated);'不会进入'Configuration.routeIfAlreadyAuthenticated'中指定的路由。我仍然需要点击刷新才能看到重定向。 – user2517182
@ user2517182那么你的配置或路由有问题。尝试提供一个不工作的旋转。 – Lux
我修改了我的代码并做了类似于您在此处的操作。这解决了我的问题。谢谢! – user2517182