JWT Token 自动续期的解决方案
后端在登录接口中 如果校验账号密码成功 则根据用户id和用户类型创建jwt token(有效期设置为-1,即永不过期),得到A更新登录日期(当前时间new Date()即可)(业务上可选),得到B在redis中缓存key为ACCESS_TOKEN:userId:A(加上A是为了防止用户多个客户端登录造成token覆盖),value为B的毫秒数(转换成字符串类型),过期时间为7天(7 * 24 *
·
后端
- 在登录接口中 如果校验账号密码成功 则根据用户id和用户类型创建jwt token(有效期设置为-1,即永不过期),得到A
- 更新登录日期(当前时间new Date()即可)(业务上可选),得到B
- 在redis中缓存key为ACCESS_TOKEN:userId:A(加上A是为了防止用户多个客户端登录
造成token覆盖),value为B的毫秒数(转换成字符串类型),过期时间为7天(7 * 24 * 60 * 60) - 在登录结果中返回json格式为{“result”:“success”,“token”: A}
- 用户在接口请求header中携带token进行登录,后端在所有接口前置拦截器进行拦截,作用是解析token拿到userId和用户类型(用户调用业务接口只需要传token即可),如果解析失败(抛出SignatureException),则返回json(code = 0 ,info= Token验证不通过,errorCode = ‘1001’); 此外如果解析成功,验证redis中key为ACCESS_TOKEN:userId:A 是否存在如果不存在 则返回json(code = 0 ,info= 会话过期请重新登录, errorCode = ‘1002’); 如果缓存key存在,则自动续7天超时时间(value不变),实现频繁登录用户免登陆。
- 把userId和用户类型放入request参数中 接口方法中可以直接拿到登录用户信息
- 如果是修改密码或退出登录 则废除access_tokens(删除key)
前端(VUE)
- 用户登录成功,则把username存入cookie中,key为loginUser;把token存入cookie中,key为accessToken把token存入Vuex全局状态中
- 进入首页
更多推荐
所有评论(0)