获取当前用户信息
接口信息
- 接口路径:
/api/auth/me - 请求方法:
GET - 是否需要认证: 是
请求参数
无参数。
请求示例
bash
curl -X GET http://localhost:3000/api/auth/me \
-H "Content-Type: application/json" \
-b "auth_token=your_token_here"响应示例
成功响应
json
{
"success": true,
"data": {
"userId": 1,
"username": "admin",
"email": "admin@demo.com",
"nickname": "演示管理员",
"avatar": null,
"bio": null,
"role": "admin",
"status": "active",
"created_at": "2025-01-01T00:00:00.000Z",
"updated_at": "2025-01-01T00:00:00.000Z"
}
}未认证
json
{
"success": false,
"message": "未登录或登录已过期"
}用户状态异常
json
{
"success": false,
"message": "用户状态异常"
}响应字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| userId | number | 用户 ID |
| username | string | 用户名 |
| string | 邮箱 | |
| nickname | string | 昵称 |
| avatar | string | null | 头像 URL |
| bio | string | null | 个人简介 |
| role | string | 用户角色(admin/user) |
| status | string | 用户状态(active/inactive) |
| created_at | string | 创建时间(ISO 8601) |
| updated_at | string | 更新时间(ISO 8601) |
前端集成示例
javascript
// 获取当前用户信息
async function getCurrentUser() {
const response = await fetch('/api/auth/me', {
method: 'GET',
credentials: 'include'
})
if (!response.ok) {
// Token 失效,跳转到登录页
if (response.status === 401) {
window.location.href = '/admin/login'
}
throw new Error('获取用户信息失败')
}
const result = await response.json()
if (result.success) {
return result.data
}
throw new Error(result.message)
}
// 使用组合式函数
const useAuth = () => {
const user = ref(null)
const loading = ref(false)
const error = ref(null)
const fetchUser = async () => {
loading.value = true
error.value = null
try {
user.value = await getCurrentUser()
} catch (err) {
error.value = err.message
} finally {
loading.value = false
}
}
return {
user,
loading,
error,
fetchUser
}
}使用场景
1. 页面权限检查
javascript
// 中间件或路由守卫
export default defineNuxtRouteMiddleware(async (to, from) => {
const { user } = await getCurrentUser()
if (!user || user.role !== 'admin') {
return navigateTo('/admin/login')
}
})2. 显示用户信息
vue
<template>
<div class="user-info">
<img :src="user.avatar || '/default-avatar.png'" alt="头像" />
<div class="user-details">
<p class="name">{{ user.nickname || user.username }}</p>
<p class="email">{{ user.email }}</p>
<p class="role">{{ user.role === 'admin' ? '管理员' : '普通用户' }}</p>
</div>
</div>
</template>
<script setup>
const { data: user } = await useFetch('/api/auth/me')
</script>3. 自动刷新用户信息
javascript
// 定时刷新用户信息
setInterval(async () => {
try {
const user = await getCurrentUser()
// 更新本地用户状态
updateUserInfo(user)
} catch (error) {
console.error('刷新用户信息失败:', error)
}
}, 5 * 60 * 1000) // 每5分钟刷新一次注意事项
- Token 验证: 接口会验证 JWT Token 的有效性
- 用户状态检查: 用户状态必须为
active才能获取信息 - 缓存策略: 前端可缓存用户信息,但要定期刷新
- 错误处理: Token 失效时自动跳转到登录页