reactjs - 过期后自动获取新token
问题描述
所以,在这里我请求获取一个 api 令牌,之后我在登录函数中使用它。该令牌在一小时内到期,这使网站停止工作。我想要的是在过期一小时后自动获取新令牌以处理旧令牌的过期,并覆盖保存在会话存储中的令牌。顺便说一句,我在这里没有使用 Redux。
componentDidMount(){
let url1 = ``;
fetch(url1,{
method: 'POST'
})
.then((response) => response.json())
.then((responseJson) => {
this.setState({authToken: responseJson.auth_token}, ()=>{
sessionStorage.setItem('auth-token', this.state.authToken);
})
})
.catch((error) => {
console.log(error)
});
}
解决方案
看看下面的代码,假设您在问题中说令牌到期时间为 1 小时,则每 59 分钟获取一次 userToken。我们所做的是在组件安装后立即调用 fetchToken 并启动一个计时器,该计时器将在 59 分钟后重复此调用。一旦组件卸载,我们就会清理并清除计时器。(注意:59 分钟只是一个假设,您可以在到期前随时获取令牌)
componentDidMount(){
let url1 = ``;
this.fetchToken();
this.refetchTokenId = setInterval(this.fetchToken, 59 * 60 * 1000)
}
componentWillUnmount() {
clearInterval(this.refetchTokenId)
}
fetchToken = () => {
fetch(url1,{
method: 'POST'
})
.then((response) => response.json())
.then((responseJson) => {
this.setState({authToken: responseJson.auth_token}, ()=>{
sessionStorage.setItem('auth-token', this.state.authToken);
})
})
.catch((error) => {
console.log(error)
});
}
推荐阅读
- react-props - 上下文 API 无法在反应导航 5 中传递数据
- python - 我执行了这段代码,得到了错误“TypeError: 'numpy.float64' object is not iterable”
- javascript - Chart.js 格式化数据值
- c++ - 如何限制对 A 类的非常量公共成员 m 的访问为 const 到另一个类 B,包含 A 作为非常量成员?
- python - Tensorflow keras model_load 错误:ValueError:应定义“密集”输入的最后一个维度。找到`无`
- python - Python - 写入文本文件,但它们显示为空?
- python - Keras LSTM 中的内核和循环内核
- flutter - 按下按钮后如何使颜色固定,当您返回应用程序时,在颤动中保持相同的颜色?
- php - PHP - 准备好的 bind_param 不能与内部连接一起使用
- android-studio - Flutter BLE 应用程序使 LED 闪烁多次输入