fix: preserve production admin password on deploy
This commit is contained in:
@@ -11,7 +11,7 @@ if (!databaseUrl) {
|
||||
const prisma = new PrismaClient({ adapter: new PrismaPg(databaseUrl) });
|
||||
const username = process.env.PROD_ADMIN_USERNAME || 'prod_admin';
|
||||
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;
|
||||
|
||||
function hashPassword(value) {
|
||||
@@ -19,6 +19,8 @@ function hashPassword(value) {
|
||||
}
|
||||
|
||||
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({
|
||||
where: { code: 'platform_admin' },
|
||||
update: { name: '平台管理员', scope: 'platform' },
|
||||
@@ -29,7 +31,7 @@ async function main() {
|
||||
update: {
|
||||
email,
|
||||
displayName: '生产平台管理员',
|
||||
passwordHash: hashPassword(password),
|
||||
...(password ? { passwordHash: hashPassword(password) } : {}),
|
||||
status: 'active',
|
||||
failedLoginCount: 0,
|
||||
lockedUntil: null,
|
||||
@@ -54,7 +56,7 @@ async function main() {
|
||||
'CMPP production admin account',
|
||||
`username=${username}`,
|
||||
`email=${email}`,
|
||||
`password=${password}`,
|
||||
password ? `password=${password}` : 'password=unchanged',
|
||||
`generatedAt=${new Date().toISOString()}`,
|
||||
'',
|
||||
].join('\n');
|
||||
|
||||
Reference in New Issue
Block a user