用户在登录之后为了保证账号的安全性我们需要更新token;不知不觉的将token给更新掉;
即使我们的token泄露也会马上给换掉;此时拿到的就是一个务实的过期token;
思路:
首先我们要 生成两个token;一个长token和一个短token; 短token就假设设置五分钟后过期;
然后,我们在后端 进行拦截过期的token;拦截到报406;前端用拦截器,拦截406,拦截到之后,
我们就将长token传入后端,设置一下过期时间;在返回前段进行本地存储;
把toekn给更换了;
此时应该是当我们登录上去的时候;不久token就过期了,随时又进行了更新;
登录成功存储两个token:
payload = {
'uid':user.uid,
'mobile':user.mobile,
'username':user.username,
'exp':time.time() + 7200
}
key = current_app.config.get('SECRET_KEY')
token = jwt.encode(payload,key,algorithm='HS256')
# 第二个 长token
payload['exp'] = int(time.time()) + 30 *86400
payload['is_login'] = True
log_token = jwt.encode(payload,key,algorithm='HS256')
return jsonify({
'code':200,
'msg':"登录成功",
'username':user.username,
'token':token,
'log_token':log_token
})
触发异常对token进行拦截:
try:
payload = jwt.decode(token,key,algorithms="HS256")
except ExpiredSignatureError as e:
return jsonify({
'code':406,
'msg':"Token过期"
})
拦截器对过期token响应进行拦截,开始更新token:
else if(resp.data.code==406){
axios.post("http://127.0.0.1:5000/v1/usertoken",{
log_token:localStorage.log_token || ""
})
.then((result)=>{
console.log(result,'更新token的响应6666666')
if(result.data.code==200){
// alert(result.data.token,'更新token的响应')
localStorage.setItem("token",result.data.token)
window.location.reload()
}

为确保用户账号安全,本文介绍了在用户登录后如何及时更新token。通过生成长、短两个token,短token五分钟后过期。后端拦截过期token并返回406状态码,前端拦截器接收到406时,使用长token更新并存储新的token,从而实现token的即时更新。登录成功后,两个token存储于本地,当token过期时,会触发更新流程。
1万+

被折叠的 条评论
为什么被折叠?



