2016-06-22 73 views
4

我有一個應用程序已實施OAuth2。它工作正常,但我在這裏與refresh_tokens混淆。我的應用程序正在使用React + Redux組合。在React Redux應用程序中使用OAuth2刷新令牌

我知道我需要檢查我的access_token是否過期,然後使用refresh_token索要新的。好的...但是我應該什麼時候刷新它?發生401之後或者當某個API需要授權的請求準備就緒時(就在發送之前)?

我也知道如何使用HTTP攔截器在發送之前獲取所有API請求或檢測到401響應。 問題是我很困惑如何在Redux流程中解決問題。如何「凍結」令牌刷新時間的請求?或者當我解決401響應的問題時如何重複請求?

+0

您是否知道這一點? – Lee

回答

3

首次成功驗證服務器時,我們會有{access_token,expires_in,refresh_token}。我們將在本地存儲中存儲session storage和refresh_token中的access_token和expires_in。

每當獲取access_token以獲取數據(您應該使用填充access_token來增強/包裝獲取),您將檢查expires_in是否即將到期(小於1分鐘,或您感覺舒適),然後我們使用refresh_token請求新的access_token。當然,我們也必須將新的結果更新到存儲中。

僞代碼:

function getToken() { 
    const expiresIn = storage.getItem(KEY_EXPIRES_IN); 
    const accessToken = storage.getItem(KEY_ACCESS_TOKEN); 
    if (accessToken 
     && (!expiresIn || moment.unix(Number(expiresIn)).diff(moment(), 'minute') > 1)) { 
     return accessToken; 
    } 
    return refreshToken(); 
} 

以上函數都會被調用您對服務器的請求的時間。

P/S:您可能希望將其作爲使用同構取指的承諾