121 lines
3.7 KiB
TypeScript
121 lines
3.7 KiB
TypeScript
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||
// @ts-nocheck
|
||
// 加载环境变量(必须在其他导入之前)
|
||
import * as dotenv from 'dotenv';
|
||
import * as path from 'path';
|
||
|
||
// 根据 NODE_ENV 加载对应的环境配置文件
|
||
const nodeEnv = process.env.NODE_ENV || 'development';
|
||
const envFile = `.env.${nodeEnv}`;
|
||
// scripts 目录的父目录就是 backend 目录
|
||
const backendDir = path.resolve(__dirname, '..');
|
||
const envPath = path.resolve(backendDir, envFile);
|
||
|
||
// 尝试加载环境特定的配置文件
|
||
dotenv.config({ path: envPath });
|
||
|
||
// 如果环境特定文件不存在,尝试加载默认的 .env 文件
|
||
if (!process.env.DATABASE_URL) {
|
||
dotenv.config({ path: path.resolve(backendDir, '.env') });
|
||
}
|
||
|
||
// 验证必要的环境变量
|
||
if (!process.env.DATABASE_URL) {
|
||
console.error('❌ 错误: 未找到 DATABASE_URL 环境变量');
|
||
console.error(` 请确保存在以下文件之一:`);
|
||
console.error(` - ${envPath}`);
|
||
console.error(` - ${path.resolve(backendDir, '.env')}`);
|
||
console.error(` 或者设置 NODE_ENV 环境变量(当前: ${nodeEnv})`);
|
||
process.exit(1);
|
||
}
|
||
|
||
import { PrismaClient } from '@prisma/client';
|
||
import * as bcrypt from 'bcrypt';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
async function updatePassword() {
|
||
try {
|
||
const tenantCode = 'super';
|
||
const username = 'admin';
|
||
const newPassword = process.argv[2] || 'cms@admin'; // 支持命令行参数传入新密码
|
||
|
||
console.log(`🔐 开始修改租户 "${tenantCode}" 的 admin 用户密码...\n`);
|
||
|
||
// 1. 查找租户
|
||
console.log(`📋 步骤 1: 查找租户 "${tenantCode}"...`);
|
||
const tenant = await prisma.tenant.findUnique({
|
||
where: { code: tenantCode },
|
||
});
|
||
|
||
if (!tenant) {
|
||
console.error(`❌ 错误: 租户 "${tenantCode}" 不存在!`);
|
||
process.exit(1);
|
||
}
|
||
|
||
console.log(`✅ 找到租户: ${tenant.name} (${tenant.code})\n`);
|
||
|
||
// 2. 查找用户
|
||
console.log(`👤 步骤 2: 查找用户 "${username}"...`);
|
||
const existingUser = await prisma.user.findFirst({
|
||
where: {
|
||
tenantId: tenant.id,
|
||
username: username,
|
||
},
|
||
});
|
||
|
||
if (!existingUser) {
|
||
console.error(
|
||
`❌ 错误: 租户 "${tenantCode}" 下不存在用户 "${username}"!`,
|
||
);
|
||
console.error(` 请先创建该用户`);
|
||
process.exit(1);
|
||
}
|
||
|
||
console.log(
|
||
`✅ 找到用户: ${existingUser.username} (${existingUser.nickname})\n`,
|
||
);
|
||
|
||
// 3. 加密新密码
|
||
console.log(`🔒 步骤 3: 加密新密码...`);
|
||
const hashedPassword = await bcrypt.hash(newPassword, 10);
|
||
console.log(`✅ 密码加密完成\n`);
|
||
|
||
// 4. 更新密码
|
||
console.log(`💾 步骤 4: 更新用户密码...`);
|
||
const updatedUser = await prisma.user.update({
|
||
where: { id: existingUser.id },
|
||
data: {
|
||
password: hashedPassword,
|
||
},
|
||
});
|
||
|
||
console.log(`✅ 密码修改成功!\n`);
|
||
console.log(`📊 更新结果:`);
|
||
console.log(` 租户名称: ${tenant.name}`);
|
||
console.log(` 租户编码: ${tenant.code}`);
|
||
console.log(` 用户ID: ${updatedUser.id}`);
|
||
console.log(` 用户名: ${updatedUser.username}`);
|
||
console.log(` 昵称: ${updatedUser.nickname}`);
|
||
console.log(` 新密码: ${newPassword}`);
|
||
console.log(` 修改时间: ${updatedUser.modifyTime}\n`);
|
||
} catch (error) {
|
||
console.error('❌ 修改密码时发生错误:');
|
||
console.error(error);
|
||
process.exit(1);
|
||
} finally {
|
||
await prisma.$disconnect();
|
||
}
|
||
}
|
||
|
||
// 执行脚本
|
||
updatePassword()
|
||
.then(() => {
|
||
console.log('🎉 密码修改脚本执行完成!');
|
||
process.exit(0);
|
||
})
|
||
.catch((error) => {
|
||
console.error('\n💥 密码修改脚本执行失败:', error);
|
||
process.exit(1);
|
||
});
|