一种方案,使用 Refresh Token,它可以避免频繁地读写操作 。这种方案中,服务端不需要刷新 Token 的过期时间,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新Token 继续使用 。这种方案中,服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写 。当然 Refresh Token 也是有有效期的,但是这个有效期就可以长一点了,比如,以天为单位的时间 。
时序图表示
使用 Token 和 Refresh Token 的时序图如下:
1)登录

2)业务请求

3)Token过期,刷新 Token

上面的时序图中并未提到 Refresh Token 过期怎么办 。不过很显然,Refresh Token 既然已经过期,就该要求用户重新登录了 。
项目中使用token总结
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录 。大概的流程是这样的:
1.前端使用用户名跟密码请求首次登录
2.后服务端收到请求,去验证用户名与密码是否正确
3.验证成功后,服务端会根据用户id、用户名、定义好的秘钥、过期时间生成一个 Token,再把这个 Token 发送给前端
4.前端收到 返回的Token,把它存储起来,比如放在 Cookie 里或者 Local Storage 里
export interface User {token: string;userInfo: UserInfo | any;companyInfo: CompanyInfo | any;resources?: string[];}
save(key: string, value: any, storageType ?: StorageType) { return this.storageService.put( { pool: key, key: 'chris-app', storageType: StorageType.localStorage }, value );}this.storageService.save(CACHE_USER_KEY, user);
5.前端每次路由跳转,判断 localStroage 有无 token,没有则跳转到登录页 。有则请求获取用户信息,改变登录状态;6.前端每次向服务端请求资源的时候需要在请求头里携带服务端签发的Token
HttpInterceptor => headers = headers.set('token', this.authService.getToken());
7.服务端收到请求,然后去验证前端请求里面带着的 Token 。没有或者 token 过期,返回401 。如果验证成功,就向前端返回请求的数据 。
8.前端得到 401 状态码,重定向到登录页面 。
【爱奇艺登录token已过期 token已过期啥意思】HttpInterceptor =>401: '用户登陆状态失效,请重新登陆 。'
推荐阅读
- 微信版本低登录不了怎么办
- 微信怎么关闭朋友圈
- 我要投诉拼多多官方平台 拼多多登录平台登录
- 青少年普法网手机怎么登录
- 支付宝怎么付款
- 怎么能让不是微信朋友看朋友圈
- 守望先锋2无法让您登录怎么办-无法登录解决方法
- 怎么区分塑料生熟材质,怎么区分塑料生熟材质和工艺
- 艺术设计与制作专业工资待遇好不好 前景如何
- 艺术设计与制作专业好吗 毕业以后吃香吗
