fix_admin_password_simple.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env python3
  2. """
  3. 修复管理员密码脚本(简化版)
  4. 直接使用 bcrypt 生成密码哈希
  5. """
  6. import bcrypt
  7. import sys
  8. from pathlib import Path
  9. # 添加项目路径
  10. sys.path.insert(0, str(Path(__file__).parent))
  11. try:
  12. from app.database import SessionLocal
  13. from app.models.admin import Admin
  14. from datetime import datetime
  15. def get_password_hash(password: str) -> str:
  16. """获取密码哈希"""
  17. salt = bcrypt.gensalt()
  18. hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
  19. return hashed.decode('utf-8')
  20. def verify_password(plain_password: str, hashed_password: str) -> bool:
  21. """验证密码"""
  22. return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password.encode('utf-8'))
  23. def fix_admin_password():
  24. """修复管理员密码"""
  25. db = SessionLocal()
  26. try:
  27. # 查找 admin 用户
  28. admin = db.query(Admin).filter(Admin.username == "admin").first()
  29. if not admin:
  30. print("❌ 未找到 admin 用户,正在创建...")
  31. # 创建新的 admin 用户
  32. admin = Admin(
  33. username="admin",
  34. password=get_password_hash("admin123"),
  35. real_name="系统管理员",
  36. role="super_admin",
  37. status=1,
  38. created_at=datetime.now(),
  39. updated_at=datetime.now()
  40. )
  41. db.add(admin)
  42. db.commit()
  43. print("✅ 已创建 admin 用户,密码: admin123")
  44. else:
  45. print(f"✅ 找到 admin 用户 (ID: {admin.id})")
  46. # 验证当前密码是否正确
  47. try:
  48. if verify_password("admin123", admin.password):
  49. print("✅ 当前密码已经是 admin123,无需修改")
  50. else:
  51. print("⚠️ 当前密码不正确,正在重置...")
  52. # 更新密码
  53. admin.password = get_password_hash("admin123")
  54. admin.updated_at = datetime.now()
  55. db.commit()
  56. print("✅ 密码已重置为: admin123")
  57. except Exception as e:
  58. print(f"⚠️ 密码验证失败: {e},正在重置密码...")
  59. admin.password = get_password_hash("admin123")
  60. admin.updated_at = datetime.now()
  61. db.commit()
  62. print("✅ 密码已重置为: admin123")
  63. # 确保状态正常
  64. if admin.status != 1:
  65. print("⚠️ 账号状态异常,正在修复...")
  66. admin.status = 1
  67. admin.updated_at = datetime.now()
  68. db.commit()
  69. print("✅ 账号状态已修复")
  70. # 验证最终结果
  71. admin = db.query(Admin).filter(Admin.username == "admin").first()
  72. if verify_password("admin123", admin.password):
  73. print("\n✅ 验证成功!可以使用以下信息登录:")
  74. print(f" 用户名: admin")
  75. print(f" 密码: admin123")
  76. print(f" 角色: {admin.role}")
  77. print(f" 状态: {'正常' if admin.status == 1 else '禁用'}")
  78. else:
  79. print("\n❌ 验证失败,请检查代码")
  80. except Exception as e:
  81. print(f"❌ 错误: {e}")
  82. import traceback
  83. traceback.print_exc()
  84. db.rollback()
  85. finally:
  86. db.close()
  87. if __name__ == "__main__":
  88. fix_admin_password()
  89. except ImportError as e:
  90. print(f"❌ 导入错误: {e}")
  91. print("\n请先安装依赖:")
  92. print("pip install sqlalchemy pymysql python-dotenv bcrypt")
  93. print("\n或者直接使用 SQL 语句更新:")
  94. print("UPDATE admins SET password = '$2b$12$KcnY3KZGYXfb3RzN7YNoYOaq5kOlrsaA4Pcjw4WCGaG3rYjgv0nhi' WHERE username = 'admin';")