【发布时间】:2021-03-19 11:06:12
【问题描述】:
使用后端 node.js,我创建了一个具有过期时间的 JWT 令牌:
signToken = (user) => {
return jwt.sign({ id: user.userId }, process.env.JWT_SECRET, { expiresIn: 60 * 60 * 24 * 10 }) // 1h = 60 * 60
}
使用前端的 React 应用程序,当用户登录时,我会将这个 JWT 令牌与返回数据一起传递并保存到本地存储(我正在使用 Redux):
const result = await userLogin({ username, password })
dispatch({ type: USER_LOGIN_SUCCESS, payload: result.data.data })
const { userReducer } = getState()
window.localStorage.setItem("accessToken", JSON.stringify(userReducer.token))
每个 api 都需要此令牌进行授权,我将在标头中传递此令牌。我在 axios 请求拦截器中设置:
instance.interceptors.request.use(
(config) => {
const accessToken = localStorage.getItem("accessToken")
config.headers.Authorization = accessToken ? `Bearer ${accessToken}` : ""
if (config.url.includes("/files/")) {
config.headers["Content-Type"] = "multipart/form-data"
}
return config
},
(error) => {
return Promise.reject(error.response)
}
)
我的问题是如何检测令牌是否在 React 上过期。在这个 React 应用中,我使用的是 axios、redux、react-redux 和 react router。
【问题讨论】:
-
如果令牌无效,您的 API 会返回一个错误,您能不能只使用该错误作为您需要新令牌的指示?
-
一种方法是在
localStorage中添加令牌到期时间戳以及令牌。当令牌即将到期时,您可以执行必要的操作,例如令牌重新生成、验证等
标签: javascript reactjs jwt