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 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');
|
||||||
|
|||||||
Reference in New Issue
Block a user