121 lines
3.2 KiB
JavaScript
121 lines
3.2 KiB
JavaScript
/**
|
||
* 认证模块 API
|
||
*
|
||
* 对应后端路由:/api/v1/auth/*
|
||
* 接口文档见:docs/api/frontend/auth.md
|
||
*
|
||
* 所有 API 函数返回 Promise,resolve 时返回完整响应体 { 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
|
||
}
|