Files
easyimg/server/api/admin/username.put.js
T

89 lines
1.9 KiB
JavaScript

import db from '../../utils/db.js'
import { verifyToken, extractToken, generateToken } from '../../utils/jwt.js'
export default defineEventHandler(async (event) => {
try {
// 验证登录
const token = extractToken(event)
if (!token) {
throw createError({
statusCode: 401,
message: '请先登录'
})
}
const user = await verifyToken(token)
if (!user) {
throw createError({
statusCode: 401,
message: 'Token 无效或已过期'
})
}
// 获取请求体
const body = await readBody(event)
const { username } = body
if (!username || !username.trim()) {
throw createError({
statusCode: 400,
message: '请输入新用户名'
})
}
if (username.length < 3) {
throw createError({
statusCode: 400,
message: '用户名长度至少 3 位'
})
}
// 检查用户名是否已存在(如果不同)
if (username !== user.username) {
const existingUser = await db.users.findOne({ username: username.trim() })
if (existingUser) {
throw createError({
statusCode: 400,
message: '用户名已存在'
})
}
}
// 更新用户名
await db.users.update(
{ _id: user.userId },
{
$set: {
username: username.trim(),
updatedAt: new Date().toISOString()
}
}
)
// 生成新 Token
const newToken = await generateToken({
userId: user.userId,
username: username.trim()
})
return {
success: true,
message: '用户名修改成功',
data: {
token: newToken,
username: username.trim()
}
}
} catch (error) {
if (error.statusCode) {
throw error
}
console.error('[Admin] 修改用户名失败:', error)
throw createError({
statusCode: 500,
message: '修改用户名失败'
})
}
})