在React Redux应用程序中使用OAuth2刷新令牌

时间:2016-06-22 09:13:15

标签: reactjs oauth-2.0 redux redux-framework

我有一个已实施OAuth2的应用。它工作正常,但我在这里与refresh_tokens混淆。我的应用正在使用React + Redux组合。

我知道我需要检查access_token是否已过期,然后使用refresh_token请求新的401。好的......但什么时候应该刷新它? API发生后或需要授权的某个HTTP请求准备就绪时(发送前)?

我还知道在发送或检测API响应之前,如何使用401拦截器获取所有Redux个请求。 问题是我很困惑如何解决401流程中的问题。如何“冻结”令牌刷新时间的请求?或者当我在Dim master_book As Workbook, ref_book As Workbook Dim sh_cnt As Long, i As Long Dim sheet As Worksheet Set ref = ThisWorkbook ' set the master workbook sh_cnt = ref_book.Sheets.Count For i = 1 To sh_cnt Set sheet = ref_book.Sheets(1) master_book.Sheets(1).Range("A" & i) = sheet.Range("A" & sheet.Cells.CurrentRegion.Rows.Count) Next 响应中解决问题时如何重复请求?

1 个答案:

答案 0 :(得分:5)

首次成功通过服务器验证时,我们将{access_token,expires_in,refresh_token}。我们将在session storage中存储access_token和expires_in,在本地存储中存储refresh_token。

每当获取access_token以获取数据时(您应该使用填充access_token来增强/包装fetch),您将检查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:您可能希望将其作为与isomorphic-fetch一起使用的承诺