| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #!/usr/bin/env python3
- """
- 修复管理员密码脚本(简化版)
- 直接使用 bcrypt 生成密码哈希
- """
- import bcrypt
- import sys
- from pathlib import Path
- # 添加项目路径
- sys.path.insert(0, str(Path(__file__).parent))
- try:
- from app.database import SessionLocal
- from app.models.admin import Admin
- from datetime import datetime
-
- def get_password_hash(password: str) -> str:
- """获取密码哈希"""
- salt = bcrypt.gensalt()
- hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
- return hashed.decode('utf-8')
-
- def verify_password(plain_password: str, hashed_password: str) -> bool:
- """验证密码"""
- return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password.encode('utf-8'))
-
- def fix_admin_password():
- """修复管理员密码"""
- db = SessionLocal()
- try:
- # 查找 admin 用户
- admin = db.query(Admin).filter(Admin.username == "admin").first()
-
- if not admin:
- print("❌ 未找到 admin 用户,正在创建...")
- # 创建新的 admin 用户
- admin = Admin(
- username="admin",
- password=get_password_hash("admin123"),
- real_name="系统管理员",
- role="super_admin",
- status=1,
- created_at=datetime.now(),
- updated_at=datetime.now()
- )
- db.add(admin)
- db.commit()
- print("✅ 已创建 admin 用户,密码: admin123")
- else:
- print(f"✅ 找到 admin 用户 (ID: {admin.id})")
-
- # 验证当前密码是否正确
- try:
- if verify_password("admin123", admin.password):
- print("✅ 当前密码已经是 admin123,无需修改")
- else:
- print("⚠️ 当前密码不正确,正在重置...")
- # 更新密码
- admin.password = get_password_hash("admin123")
- admin.updated_at = datetime.now()
- db.commit()
- print("✅ 密码已重置为: admin123")
- except Exception as e:
- print(f"⚠️ 密码验证失败: {e},正在重置密码...")
- admin.password = get_password_hash("admin123")
- admin.updated_at = datetime.now()
- db.commit()
- print("✅ 密码已重置为: admin123")
-
- # 确保状态正常
- if admin.status != 1:
- print("⚠️ 账号状态异常,正在修复...")
- admin.status = 1
- admin.updated_at = datetime.now()
- db.commit()
- print("✅ 账号状态已修复")
-
- # 验证最终结果
- admin = db.query(Admin).filter(Admin.username == "admin").first()
- if verify_password("admin123", admin.password):
- print("\n✅ 验证成功!可以使用以下信息登录:")
- print(f" 用户名: admin")
- print(f" 密码: admin123")
- print(f" 角色: {admin.role}")
- print(f" 状态: {'正常' if admin.status == 1 else '禁用'}")
- else:
- print("\n❌ 验证失败,请检查代码")
-
- except Exception as e:
- print(f"❌ 错误: {e}")
- import traceback
- traceback.print_exc()
- db.rollback()
- finally:
- db.close()
-
- if __name__ == "__main__":
- fix_admin_password()
-
- except ImportError as e:
- print(f"❌ 导入错误: {e}")
- print("\n请先安装依赖:")
- print("pip install sqlalchemy pymysql python-dotenv bcrypt")
- print("\n或者直接使用 SQL 语句更新:")
- print("UPDATE admins SET password = '$2b$12$KcnY3KZGYXfb3RzN7YNoYOaq5kOlrsaA4Pcjw4WCGaG3rYjgv0nhi' WHERE username = 'admin';")
|