簡體   English   中英

根據條件,路由上的Ember simple-auth AuthenticatedRouteMixin或UnauthenticatedRouteMixin

[英]Ember simple-auth AuthenticatedRouteMixin or UnauthenticatedRouteMixin on route depending on condition

根據從服務器返回的響應,我的路由應該為AuthenticatedRouteMixinUnauthenticatedRouteMixin 我該如何實施?

目前,我有一條使用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);
      }
    }
  }

但是,這有兩個問題。

  1. 它看起來和感覺都是錯誤的。 可能有更好的方法來執行此操作。
  2. 這有一些意想不到的后果。 如果未登錄然后嘗試登錄,則用戶需要刷新頁面,然后才能重定向到適當的頁面。 我查看了簡單身份驗證代碼,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,我遇到了無限重定向。

我想通了這一部分。 我只是在會話中設置了鍵/值。 如果為true,則重新加載並刪除密鑰或將其設置為false,因此重新加載僅發生一次。

好吧,正確的方法是在您的路線中手動進行混合。 查看源代碼。

它不是那么難嗎? 有趣的事情是:為什么要在對會話進行身份AuthenticatedRouteMixin時想要AuthenticatedRouteMixin而在不對會話進行身份AuthenticatedRouteMixin時要擁有UnauthenticatedRouteMixin 這基本上與不包含任何混合時的行為相同。

因為AuthenticatedRouteMixin僅在未認證會話時更改行為,而UnauthenticatedRouteMixin僅在路由經過認證時更改行為。

但您在路線中遇到的問題就是您要的:

beforeModel(transition) {
  if(...) {
    if (!this.get('session.isAuthenticated')) {
      transition.abort();
      this.set('session.attemptedTransition', transition);
      this.transitionTo(Configuration.authenticationRoute);
      return;
    }
  } else {
    if (this.get('session').get('isAuthenticated')) {
      transition.abort();
      this.transitionTo(Configuration.routeIfAlreadyAuthenticated);
      return;
    }
  }
  return this._super(...arguments);
},

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM