2017-02-20 27 views
0

我使用 恩貝爾:2.11.0,餘燼,簡單身份驗證:1.2.0灰燼,簡單權威性防止會話無效在401效應初探

我用餘燼,簡單AUTH通過驗證我的應用程序oauth2到我的REST API。

ember-simple-auth的標準行爲是在服務器響應401狀態代碼時使用戶會話無效。 我要處理這個不同,並試圖重寫此:

import DS from 'ember-data'; 
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 

export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    host: 'http://localhost:3000', 
    authorizer: 'authorizer:oauth2', 

    /* 
    * The DataAdapterMixin invalidetes the session automatically if the server 
    * returns the status 401. We don't want this behaviour, so we override 
    * the handleResponse method. 
    */ 
    handleResponse(status) { 
    console.log(status); 
    return this._super(...arguments); 
    } 

}); 

在我RestAdapter我使用它觸發了用handleResponse方法中的無效宣告DataAdapterMixin。 所以我試圖在我的適配器中覆蓋此方法。我的方法被調用,但之後我的方法完成後,混入方法由燼叫,你可以在這裏看到:

enter image description here

爲灰燼superWrapper方法狀態的評論,它是由處理將呼叫超類的方法並將它們重定向到它,但不知怎的,它似乎將它重定向到mixin。

我不知道爲什麼會發生這種情況。這可能可以通過直接編輯DataAdapterMixin來解決,但是認爲這對於未來版本的兼容性來說不是一個好主意 - 簡單驗證

我真的很感謝如果有人能指出我的權利方向來使覆蓋工作。

+0

其實用'this._super(...參數);'你調用混入'handleRresponse' –

回答

1

當你從mixin擴展適配器時,this._super(...arguments);會調用mixin的方法(如果它有這樣的方法)。這就是爲什麼你的覆蓋不起作用。您有以下選項:

  1. 查找到燼數據源和複製從DS.RESTAdapterstart from herehandleResponse代碼。沒有this._super電話 - 沒有來自mixin的影響。這可能不是那麼容易,因爲它聽起來並且可能與未來版本的餘燼數據不兼容。
  2. 通過從ember-simple-auth複製代碼並刪除/修改它的handleResponse方法創建您自己的DataAdapterMixin。這可能與未來版本的ember-simpe-auth不兼容。
  3. 修改arguments調用this._super(...arguments),這樣的狀態將是400而不是401之前:

    handleResponse: function (status) { 
        /** 
        * Modify status 
        */ 
        if (status === 401) { 
        status = 400; 
        } 
    
        /** 
        * Replace status in arguments. 
        */ 
        var args = Array.prototype.slice.call(arguments, 0); 
        args.splice(0, 1, status); 
    
        /** 
        * Call parent's method 
        */ 
        return this._super(...args); 
    } 
    

    這種方法是與將來的版本兼容 - 即使新的參數將被添加(目前論點statusheaders ,​​),這段代碼將起作用。如果狀態不再是第一個參數,它將停止工作(我不認爲這會在不久的將來發生)。

但我還想說的東西可能是不對的與你的後端:401的意思是「unathorized」和灰燼,簡單權威性做什麼應該在這種情況下做 - 無效會話。如果你在某些情況下需要特殊身份,我建議使用418(我是一個茶壺)。

+0

感謝您的幫助。你是對的,我會改變我的服務器代碼。我對HTTP 401和403之間的差異感到困惑。我想處理用戶被認證但不允許查看資源的情況。 403似乎更合適。 –