我有一个认证基于JWT的系统。我有一个JWT身份验证令牌,以及客户端上的刷新令牌。刷新令牌存储在服务器上的数据库中,用于在JWT每12小时到期时刷新JWT - 我相信这是非常标准的设置。
我的问题是将它合并到我的React Native项目中并处理令牌过期。用户可能会对其受保护的"执行许多API调用。需要JWT的区域,但是一旦JWT到期,它将发回" UnauthorizedError"像这样:
router.use('/protected', ejwt({secret: config.secret}));
//catch any errors if the JWT is not valid
router.use((err, req, res, next) => {
if (err.name === 'UnauthorizedError') {
res.status(401).send({
success: false,
error: "UnauthorizedError"
});
}
});
这将发回给JWT过期的RN应用程序,但此时我希望应用程序将另一个请求发送回服务器生成新的JWT,但我不确定是否有办法为我的应用程序启动的每个API调用最有效地执行此操作。每个API调用都可以调用一个函数来检查服务器,如果返回的值是" UnauthorizedError",但我知道这不是最好的方法:
return AuthApi.someApiCall(token).then(response => {
if(response.success){
//do some success stuff
}else{
//this seems bad to be repeated for every API call
checkToken(response).then(() => {
dispatch(updateAuthToken());
});
}
})
我一直在环顾四周,Redux中间件看起来很有前途,但我不知道是否有更成熟的方式,或者有人有任何其他想法?
谢谢!