You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
// 认证模块 API
|
|
import { post } from './request'
|
|
import { setToken, setRefreshToken, clearTokens, ApiResponse } from './config'
|
|
import type { User } from '../types'
|
|
|
|
export interface LoginRequest {
|
|
phone: string
|
|
password?: string // 密码登录
|
|
code?: string // 验证码登录
|
|
}
|
|
|
|
export interface RegisterRequest {
|
|
phone: string
|
|
password: string
|
|
code: string
|
|
}
|
|
|
|
// 后端实际返回的响应结构
|
|
export interface AuthResponse {
|
|
token: string // JWT Token 直接字符串
|
|
user_id: number
|
|
nickname: string
|
|
avatar: string
|
|
survey_completed: boolean
|
|
}
|
|
|
|
// 发送验证码
|
|
export async function sendCode(phone: string, type: 'login' | 'register' = 'login') {
|
|
return post<null>('/auth/send-code', { phone, type })
|
|
}
|
|
|
|
// 用户登录(支持密码或验证码)
|
|
export async function login(data: LoginRequest): Promise<ApiResponse<AuthResponse>> {
|
|
// 如果只传了code,将code作为password发送(验证码登录模式)
|
|
const loginData = {
|
|
phone: data.phone,
|
|
password: data.password || data.code, // 验证码登录时,code作为password
|
|
}
|
|
|
|
console.log('[Login] 请求数据:', JSON.stringify(loginData))
|
|
|
|
const result = await post<AuthResponse>('/auth/login', loginData)
|
|
|
|
console.log('[Login] 响应结果:', JSON.stringify(result))
|
|
|
|
// 后端直接返回 token 字符串,不是对象
|
|
if (result.code === 0 && result.data?.token) {
|
|
console.log('[Login] 准备保存Token:', result.data.token.substring(0, 30) + '...')
|
|
await setToken(result.data.token)
|
|
console.log('[Login] Token已保存')
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// 用户注册
|
|
export async function register(data: RegisterRequest): Promise<ApiResponse<AuthResponse>> {
|
|
const result = await post<AuthResponse>('/auth/register', data)
|
|
|
|
// 后端直接返回 token 字符串
|
|
if (result.code === 0 && result.data?.token) {
|
|
await setToken(result.data.token)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// 退出登录
|
|
export async function logout() {
|
|
await clearTokens()
|
|
}
|
|
|