根據從服務器返回的響應,我有一條路線應該是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