flnxi-Wu/scripts/tools/update-admin-account.js
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

99 lines
2.4 KiB
JavaScript

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()