jwt logout实现
时间: 2023-10-20 11:27:50 浏览: 50
JWT是一种用于身份验证和授权的令牌。在JWT实现中,退出登录通常是通过删除存储在客户端的令牌来实现的。具体来说,当用户点击退出登录时,前端可以清除存储在cookie或本地存储中的令牌信息。这样,当下次用户再次访问需要身份验证的资源时,由于缺少有效的令牌,服务器会拒绝访问,并要求用户重新进行身份验证。
在前端实现中,可以使用axios拦截器来处理未授权的错误。当服务器返回错误码时,可以在拦截器中判断是否为需要退出登录的错误码,比如50008、50012和50014。如果是这些错误码,前端可以弹出确认退出登录的对话框,用户可以选择取消以留在当前页面或重新登录。如果用户选择重新登录,可以调用相关方法来清除令牌信息并刷新页面。
具体代码实现如下:
```javascript
axios.interceptors.response.use(
(response) => {
const res = response.data;
if (res.code !== 0 && res.code !== 20000) {
Message.error({
content: res.message || 'Error',
duration: 5 * 1000,
});
if ([50008, 50012, 50014].includes(res.code) && response.config.url !== '/api/user/info') {
Modal.error({
title: 'Confirm logout',
content: '您已登出,您可以取消以留在此页面,或重新登录',
okText: '重新登陆',
async onOk() {
const userStore = useUserStore();
await userStore.logout();
window.location.reload();
},
});
}
return Promise.reject(new Error(res.message || 'Error'));
}
return res;
},
(error) => {
Message.error({
content: error.msg || 'Request Error',
duration: 5 * 1000,
});
return Promise.reject(error);
}
);
```
在以上代码中,如果服务器返回的错误码是50008、50012或50014,并且当前请求不是获取用户信息的接口时,会弹出一个确认退出登录的对话框。如果用户点击确认重新登录,会调用`useUserStore().logout()`方法来清除令牌信息,并刷新页面。
这样,在JWT实现中,通过前端的代码可以实现退出登录的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [[golang] 实现 jwt 方式登录](https://blog.csdn.net/luo4105/article/details/129008006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]