hookehuyr

feat(认证): 添加用户登出功能

在用户接口中添加登出API,并在认证上下文中实现异步登出逻辑,确保用户登出时清理状态和本地存储信息
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 * 提供认证上下文给子组件使用
......