const { PrismaClient } = require('@prisma/client') const bcrypt = require('bcryptjs') const prisma = new PrismaClient({ datasources: { db: { url: process.env.DATABASE_URL } } }) async function main() { const identifier = process.env.ADMIN_IDENTIFIER /* 支持直接指定邮箱或用户名 */ || 'admin' const explicitId = process.env.ADMIN_USER_ID const newEmail = process.env.ADMIN_NEW_EMAIL || '1@qq.com' const newPassword = process.env.ADMIN_NEW_PASSWORD || '666666' const newUsername = process.env.ADMIN_NEW_USERNAME || null try { console.log('=== 更新管理员账号 ===') console.log(`查找条件: ${explicitId ? `ID = ${explicitId}` : `邮箱/用户名 = ${identifier}`}`) console.log(`目标邮箱: ${newEmail}`) console.log(`新密码: ${'*'.repeat(newPassword.length)}`) if (newUsername) { console.log(`新用户名: ${newUsername}`) } console.log('') const whereClause = explicitId ? { id: explicitId } : { OR: [ { email: identifier }, { username: identifier } ] } const adminUser = await prisma.user.findFirst({ where: whereClause, orderBy: { createdAt: 'asc' } }) if (!adminUser) { console.error('未找到匹配的管理员账号,请检查输入的标识信息。') process.exit(1) } const hashedPassword = await bcrypt.hash(newPassword, 10) const dataToUpdate = { email: newEmail, password: hashedPassword } if (newUsername) { dataToUpdate.username = newUsername } // 保证账号处于激活和管理员权限 if (adminUser.role !== 'ADMIN') { dataToUpdate.role = 'ADMIN' } dataToUpdate.isActive = true const updated = await prisma.user.update({ where: { id: adminUser.id }, data: dataToUpdate, select: { id: true, email: true, username: true, role: true, isActive: true, createdAt: true } }) console.log('更新成功,最新信息如下:') console.table(updated) console.log('\n请使用新的邮箱和密码登录系统。') } catch (error) { console.error('更新失败:', error.message) if (error.meta) { console.error('详细信息:', error.meta) } process.exit(1) } finally { await prisma.$disconnect() } } main()