89 lines
1.9 KiB
JavaScript
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: '修改用户名失败'
|
|
})
|
|
}
|
|
})
|