更新token

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

用户在登录之后为了保证账号的安全性我们需要更新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()

 }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值