99 lines
2.4 KiB
JavaScript
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()
|
|
|