Skip to content

获取当前用户信息

接口信息

  • 接口路径: /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": "用户状态异常"
}

响应字段说明

字段名类型说明
userIdnumber用户 ID
usernamestring用户名
emailstring邮箱
nicknamestring昵称
avatarstring | null头像 URL
biostring | null个人简介
rolestring用户角色(admin/user)
statusstring用户状态(active/inactive)
created_atstring创建时间(ISO 8601)
updated_atstring更新时间(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分钟刷新一次

注意事项

  1. Token 验证: 接口会验证 JWT Token 的有效性
  2. 用户状态检查: 用户状态必须为 active 才能获取信息
  3. 缓存策略: 前端可缓存用户信息,但要定期刷新
  4. 错误处理: Token 失效时自动跳转到登录页

相关接口