4-08:用户被动退出解决方案之被动处理
上一节我们处理了 用户被动退出时的主动处理 ,那么在这一小节我们去处理 用户被动退出时的被动处理 。
还是和上一小节一样,我们还是先明确背景,然后再来明确业务逻辑。
背景:
首先我们需要先明确 被动处理 需要应对两种业务场景:
token过期- 单用户登录
然后我们一个一个来去看,首先是 token 过期
我们知道对于
token而言,本身就是具备时效的,这个是在服务端生成token时就已经确定的。而此时我们所谓的
token过期指的就是:服务端生成的
token超过 服务端指定时效 的过程
而对于 单用户登录 而言,指的是:
当用户 A 登录之后,
token过期之前。用户 A 的账号在其他的设备中进行了二次登录,导致第一次登录的 A 账号被 “顶下来” 的过程。
即:同一账户仅可以在一个设备中保持在线状态
那么明确好了对应的背景之后,接下来我们来看对应的业务处理场景:
从背景中我们知道,以上的两种情况,都是在 服务端进行判断的,而对于前端而言其实是 服务端通知前端的一个过程。
所以说对于其业务处理,将遵循以下逻辑:
- 服务端返回数据时,会通过特定的状态码通知前端
- 当前端接收到特定状态码时,表示遇到了特定状态:
token时效 或 单用户登录 - 此时进行 退出登录 处理
但是这里大家需要注意,因为咱们课程的特性,同一个账号需要在多个设备中使用,所以说此时将不会指定 单用户登录 的状态码,仅有 token 失效 状态码。之后当大家需要到 单用户登录 时,只需要增加一个状态码判断即可。
那么明确好了业务之后,接下来我们来实现对应代码:
在 utils/request 的响应拦截器中,增加以下逻辑:
// 响应拦截器
service.interceptors.response.use(
response => {
...
},
error => {
// 处理 token 超时问题
if (
error.response &&
error.response.data &&
error.response.data.code === 401
) {
// token超时
store.dispatch('user/logout')
}
ElMessage.error(error.message) // 提示错误信息
return Promise.reject(error)
}
)
那么至此,我们就已经完成了 整个用户退出 方案。