feat(认证): 添加用户登出功能
在用户接口中添加登出API,并在认证上下文中实现异步登出逻辑,确保用户登出时清理状态和本地存储信息
Showing
2 changed files
with
17 additions
and
3 deletions
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-03-23 23:45:53 | 2 | * @Date: 2025-03-23 23:45:53 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-03-26 12:24:03 | 4 | + * @LastEditTime: 2025-03-26 16:09:46 |
| 5 | * @FilePath: /mlaj/src/api/users.js | 5 | * @FilePath: /mlaj/src/api/users.js |
| 6 | * @Description: 用户相关接口 | 6 | * @Description: 用户相关接口 |
| 7 | */ | 7 | */ |
| ... | @@ -9,6 +9,7 @@ import { fn, fetch } from './fn'; | ... | @@ -9,6 +9,7 @@ import { fn, fetch } from './fn'; |
| 9 | 9 | ||
| 10 | const Api = { | 10 | const Api = { |
| 11 | USER_LOGIN: '/srv/?a=user_login', | 11 | USER_LOGIN: '/srv/?a=user_login', |
| 12 | + USER_LOGOUT: '/srv/?a=user_logout', | ||
| 12 | USER_REGISTER: '/srv/?a=user_register', | 13 | USER_REGISTER: '/srv/?a=user_register', |
| 13 | USER_INFO: '/srv/?a=user_info', | 14 | USER_INFO: '/srv/?a=user_info', |
| 14 | USER_UPDATE: '/srv/?a=user_edit', | 15 | USER_UPDATE: '/srv/?a=user_edit', |
| ... | @@ -23,6 +24,11 @@ const Api = { | ... | @@ -23,6 +24,11 @@ const Api = { |
| 23 | export const loginAPI = (params) => fn(fetch.post(Api.USER_LOGIN, params)); | 24 | export const loginAPI = (params) => fn(fetch.post(Api.USER_LOGIN, params)); |
| 24 | 25 | ||
| 25 | /** | 26 | /** |
| 27 | + * @description: 用户登出 | ||
| 28 | + */ | ||
| 29 | +export const logoutAPI = (params) => fn(fetch.post(Api.USER_LOGOUT, params)); | ||
| 30 | + | ||
| 31 | +/** | ||
| 26 | * @description: 用户注册 | 32 | * @description: 用户注册 |
| 27 | * @param: name 用户名称 | 33 | * @param: name 用户名称 |
| 28 | * @param: mobile 手机号 | 34 | * @param: mobile 手机号 | ... | ... |
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-03-20 21:11:31 | 2 | * @Date: 2025-03-20 21:11:31 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-03-24 01:10:13 | 4 | + * @LastEditTime: 2025-03-26 16:11:58 |
| 5 | * @FilePath: /mlaj/src/contexts/auth.js | 5 | * @FilePath: /mlaj/src/contexts/auth.js |
| 6 | * @Description: 认证上下文管理模块,提供用户认证状态管理、登录登出功能 | 6 | * @Description: 认证上下文管理模块,提供用户认证状态管理、登录登出功能 |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | // 导入Vue的组合式API相关函数 | 9 | // 导入Vue的组合式API相关函数 |
| 10 | import { ref, provide, inject, onMounted } from 'vue' | 10 | import { ref, provide, inject, onMounted } from 'vue' |
| 11 | +import { logoutAPI } from '@/api/users' | ||
| 11 | 12 | ||
| 12 | // 创建认证上下文的Symbol key,用于provide/inject依赖注入 | 13 | // 创建认证上下文的Symbol key,用于provide/inject依赖注入 |
| 13 | // 使用Symbol确保key的唯一性,避免命名冲突 | 14 | // 使用Symbol确保key的唯一性,避免命名冲突 |
| ... | @@ -88,13 +89,20 @@ export function provideAuth() { | ... | @@ -88,13 +89,20 @@ export function provideAuth() { |
| 88 | * 用户登出函数 | 89 | * 用户登出函数 |
| 89 | * 清理用户状态和本地存储的认证信息 | 90 | * 清理用户状态和本地存储的认证信息 |
| 90 | */ | 91 | */ |
| 91 | - const logout = () => { | 92 | + const logout = async () => { |
| 93 | + try { | ||
| 94 | + const { code } = await logoutAPI() | ||
| 95 | + if (code) { | ||
| 92 | // 清空当前用户状态 | 96 | // 清空当前用户状态 |
| 93 | currentUser.value = null | 97 | currentUser.value = null |
| 94 | // 清理本地存储的用户信息和登录时间戳 | 98 | // 清理本地存储的用户信息和登录时间戳 |
| 95 | localStorage.removeItem('currentUser') | 99 | localStorage.removeItem('currentUser') |
| 96 | localStorage.removeItem('loginTimestamp') | 100 | localStorage.removeItem('loginTimestamp') |
| 97 | } | 101 | } |
| 102 | + } catch (error) { | ||
| 103 | + console.error('Failed to logout:', error) | ||
| 104 | + } | ||
| 105 | + } | ||
| 98 | 106 | ||
| 99 | /** | 107 | /** |
| 100 | * 提供认证上下文给子组件使用 | 108 | * 提供认证上下文给子组件使用 | ... | ... |
-
Please register or login to post a comment