Files
EchoChat/frontend/src/api/auth.js
2026-05-26 22:41:53 +08:00

121 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 认证模块 API
*
* 对应后端路由:/api/v1/auth/*
* 接口文档见docs/api/frontend/auth.md
*
* 所有 API 函数返回 Promiseresolve 时返回完整响应体 { code, message, data }
*/
import { post, get, put } from '@/utils/request'
/**
* 用户注册
* POST /api/v1/auth/register
*
* @param {Object} data - 注册信息
* @param {string} data.username - 用户名3-50 字符,全局唯一)
* @param {string} data.email - 邮箱地址(全局唯一)
* @param {string} data.password - 登录密码6-50 字符)
* @param {string} [data.nickname] - 昵称(选填,默认与用户名相同)
* @returns {Promise<Object>} { token, refresh_token, expires_in, user }
*/
const register = (data) => {
return post('/api/v1/auth/register', data, { needAuth: false })
}
/**
* 用户登录
* POST /api/v1/auth/login
*
* @param {Object} data - 登录信息
* @param {string} data.account - 用户名或邮箱(自动识别)
* @param {string} data.password - 登录密码
* @returns {Promise<Object>} { token, refresh_token, expires_in, user }
*/
const login = (data) => {
return post('/api/v1/auth/login', data, { needAuth: false })
}
const getOAuthAuthorizeUrl = (provider) => {
return get(`/api/v1/auth/oauth/${provider}/authorize`, {}, { needAuth: false })
}
/**
* 退出登录
* POST /api/v1/auth/logout
*
* 服务端会从 Redis 中删除该用户的 Token使其立即失效
* 客户端需同步清除本地存储的 Token由 store 层处理)
*
* @returns {Promise<Object>}
*/
const logout = () => {
return post('/api/v1/auth/logout')
}
/**
* 刷新 Token
* POST /api/v1/auth/refresh-token
*
* 使用 Refresh Token 获取新的 Access Token 和 Refresh Token
* 新 Token 会覆盖 Redis 中的旧值(单设备登录)
*
* @param {string} refreshToken - Refresh Token
* @returns {Promise<Object>} { token, refresh_token, expires_in, user }
*/
const refreshToken = (refreshToken) => {
return post('/api/v1/auth/refresh-token', { refresh_token: refreshToken }, { needAuth: false })
}
/**
* 获取个人信息
* GET /api/v1/auth/profile
*
* 返回完整用户信息(含 phone、created_at 等额外字段)
*
* @returns {Promise<Object>} UserInfo 对象
*/
const getProfile = () => {
return get('/api/v1/auth/profile')
}
/**
* 更新个人信息
* PUT /api/v1/auth/profile
*
* @param {Object} data - 需要更新的字段(均为可选)
* @param {string} [data.nickname] - 新昵称
* @param {string} [data.avatar] - 新头像 URL
* @param {number} [data.gender] - 性别0=未知1=男2=女)
* @param {string} [data.phone] - 手机号
* @returns {Promise<Object>} 更新后的完整 UserInfo
*/
const updateProfile = (data) => {
return put('/api/v1/auth/profile', data)
}
/**
* 修改密码
* PUT /api/v1/auth/password
*
* @param {Object} data - 密码信息
* @param {string} data.old_password - 原密码
* @param {string} data.new_password - 新密码6-50 字符)
* @returns {Promise<Object>}
*/
const changePassword = (data) => {
return put('/api/v1/auth/password', data)
}
export default {
register,
login,
getOAuthAuthorizeUrl,
logout,
refreshToken,
getProfile,
updateProfile,
changePassword
}