栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Redux刷新JWT令牌?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Redux刷新JWT令牌?

我找到了解决此问题的方法。我不确定这是否是最佳做法,并且可能会有一些改进。

我最初的想法仍然存在:JWT刷新位于中间件中。

thunk
如果
thunk
使用中间件,则必须先使用它。

...const createStoreWithMiddleware = applyMiddleware(jwt, thunk)(createStore);

然后,在中间件代码中,我们检查令牌是否在任何异步操作之前到期。如果过期,我们还将检查是否已经在刷新令牌-
为了能够进行此类检查,我们向该州添加了对新令牌的承诺。

import { refreshToken } from '../actions/auth';export function jwt({ dispatch, getState }) {    return (next) => (action) => {        // only worry about expiring token for async actions        if (typeof action === 'function') { if (getState().auth && getState().auth.token) {     // depre jwt so that we know if and when it expires     var tokenExpiration = jwtDepre(getState().auth.token).<your field for expiration>;     if (tokenExpiration && (moment(tokenExpiration) - moment(Date.now()) < 5000)) {         // make sure we are not already refreshing the token         if (!getState().auth.freshTokenPromise) {  return refreshToken(dispatch).then(() => next(action));         } else {  return getState().auth.freshTokenPromise.then(() => next(action));         }     } }        }        return next(action);    };}

最重要的部分是

refreshToken
功能。该功能需要在刷新令牌时分派操作,以便状态将包含对新令牌的承诺。这样,如果我们调度同时使用令牌认证的多个异步操作,则令牌仅刷新一次。

export function refreshToken(dispatch) {    var freshTokenPromise = fetchJWTToken()        .then(t => { dispatch({     type: DONE_REFRESHING_TOKEN }); dispatch(saveAppToken(t.token)); return t.token ? Promise.resolve(t.token) : Promise.reject({     message: 'could not refresh token' });        })        .catch(e => { console.log('error refreshing token', e); dispatch({     type: DONE_REFRESHING_TOKEN }); return Promise.reject(e);        });    dispatch({        type: REFRESHING_TOKEN,        // we want to keep track of token promise in the state so that we don't try to refresh        // the token again while refreshing is in process        freshTokenPromise    });    return freshTokenPromise;}

我意识到这很复杂。我也担心调度

refreshToken
动作本身不是动作。请让我知道您知道的其他使用Redux处理过期JWT令牌的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号