fix: preserve production admin password on deploy

This commit is contained in:
hectorzhao
2026-07-09 15:08:47 +08:00
parent 06e6be3c39
commit 268392ee9c
+5 -3
View File
@@ -11,7 +11,7 @@ if (!databaseUrl) {
const prisma = new PrismaClient({ adapter: new PrismaPg(databaseUrl) }); const prisma = new PrismaClient({ adapter: new PrismaPg(databaseUrl) });
const username = process.env.PROD_ADMIN_USERNAME || 'prod_admin'; const username = process.env.PROD_ADMIN_USERNAME || 'prod_admin';
const email = process.env.PROD_ADMIN_EMAIL || 'admin@example.com'; const email = process.env.PROD_ADMIN_EMAIL || 'admin@example.com';
const password = process.env.PROD_ADMIN_PASSWORD || randomBytes(18).toString('base64url'); const configuredPassword = process.env.PROD_ADMIN_PASSWORD;
const credentialFile = process.env.PROD_ADMIN_CREDENTIAL_FILE; const credentialFile = process.env.PROD_ADMIN_CREDENTIAL_FILE;
function hashPassword(value) { function hashPassword(value) {
@@ -19,6 +19,8 @@ function hashPassword(value) {
} }
async function main() { async function main() {
const existingUser = await prisma.user.findUnique({ where: { username } });
const password = configuredPassword || (existingUser ? undefined : randomBytes(18).toString('base64url'));
const role = await prisma.role.upsert({ const role = await prisma.role.upsert({
where: { code: 'platform_admin' }, where: { code: 'platform_admin' },
update: { name: '平台管理员', scope: 'platform' }, update: { name: '平台管理员', scope: 'platform' },
@@ -29,7 +31,7 @@ async function main() {
update: { update: {
email, email,
displayName: '生产平台管理员', displayName: '生产平台管理员',
passwordHash: hashPassword(password), ...(password ? { passwordHash: hashPassword(password) } : {}),
status: 'active', status: 'active',
failedLoginCount: 0, failedLoginCount: 0,
lockedUntil: null, lockedUntil: null,
@@ -54,7 +56,7 @@ async function main() {
'CMPP production admin account', 'CMPP production admin account',
`username=${username}`, `username=${username}`,
`email=${email}`, `email=${email}`,
`password=${password}`, password ? `password=${password}` : 'password=unchanged',
`generatedAt=${new Date().toISOString()}`, `generatedAt=${new Date().toISOString()}`,
'', '',
].join('\n'); ].join('\n');