fix_password.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python3
  2. """
  3. 修复密码哈希格式
  4. """
  5. import pymysql
  6. from urllib.parse import urlparse
  7. import os
  8. from dotenv import load_dotenv
  9. import hashlib
  10. import secrets
  11. load_dotenv()
  12. def hash_password_simple(password):
  13. """简单的密码哈希"""
  14. # 生成盐值
  15. salt = secrets.token_hex(16)
  16. # 使用SHA256哈希
  17. password_hash = hashlib.sha256((password + salt).encode()).hexdigest()
  18. return f"sha256${salt}${password_hash}"
  19. def fix_admin_password():
  20. """修复admin用户密码"""
  21. database_url = os.getenv('DATABASE_URL', '')
  22. parsed = urlparse(database_url)
  23. config = {
  24. 'host': parsed.hostname or 'localhost',
  25. 'port': parsed.port or 3306,
  26. 'user': parsed.username or 'root',
  27. 'password': parsed.password or '',
  28. 'database': parsed.path[1:] if parsed.path else 'sso_db',
  29. 'charset': 'utf8mb4'
  30. }
  31. try:
  32. conn = pymysql.connect(**config)
  33. cursor = conn.cursor()
  34. # 生成新的密码哈希
  35. new_password = "Admin123456"
  36. new_hash = hash_password_simple(new_password)
  37. print(f"新密码: {new_password}")
  38. print(f"新哈希: {new_hash}")
  39. # 更新admin用户密码
  40. cursor.execute(
  41. 'UPDATE users SET password_hash = %s WHERE username = %s',
  42. (new_hash, 'admin')
  43. )
  44. conn.commit()
  45. # 验证更新
  46. cursor.execute('SELECT username, password_hash FROM users WHERE username = %s', ('admin',))
  47. result = cursor.fetchone()
  48. if result:
  49. username, password_hash = result
  50. print(f"✅ 密码已更新")
  51. print(f"用户名: {username}")
  52. print(f"新哈希: {password_hash}")
  53. cursor.close()
  54. conn.close()
  55. print("\n✅ admin用户密码修复完成")
  56. print("用户名: admin")
  57. print("密码: Admin123456")
  58. except Exception as e:
  59. print(f'❌ 修复失败: {e}')
  60. if __name__ == "__main__":
  61. fix_admin_password()