ERP/test_py/check_login.py
2025-11-25 10:35:02 +08:00

223 lines
6.0 KiB
Python
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
登录问题诊断脚本
"""
import sqlite3
import os
DB_PATH = 'server/data.db'
def check_database():
"""检查数据库和用户"""
print("=" * 60)
print("🔍 检查数据库...")
print("=" * 60)
if not os.path.exists(DB_PATH):
print("❌ 数据库文件不存在:", DB_PATH)
return False
print("✅ 数据库文件存在")
try:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
# 检查用户表
users = c.execute('SELECT username, role FROM users').fetchall()
if not users:
print("❌ 没有找到任何用户")
return False
print(f"\n✅ 找到 {len(users)} 个用户:")
print("-" * 60)
for username, role in users:
print(f" 👤 用户名: {username:15s} | 角色: {role}")
conn.close()
return True
except Exception as e:
print(f"❌ 数据库错误: {e}")
return False
def check_server():
"""检查服务器状态"""
print("\n" + "=" * 60)
print("🔍 检查服务器...")
print("=" * 60)
import subprocess
# 检查进程
try:
result = subprocess.run(
['ps', 'aux'],
capture_output=True,
text=True
)
if 'python' in result.stdout and 'app.py' in result.stdout:
print("✅ 服务器正在运行")
# 提取进程信息
for line in result.stdout.split('\n'):
if 'app.py' in line:
print(f" 📋 进程: {' '.join(line.split()[10:])}")
return True
else:
print("❌ 服务器未运行")
print("\n💡 启动服务器:")
print(" cd server && python3 app.py")
return False
except Exception as e:
print(f"⚠️ 无法检查进程: {e}")
return None
def check_files():
"""检查关键文件"""
print("\n" + "=" * 60)
print("🔍 检查关键文件...")
print("=" * 60)
files = {
'frontend/login.html': '登录页面',
'frontend/assets/login.css': '登录样式',
'frontend/js/api.js': 'API 接口',
'server/app.py': '后端服务',
}
all_exist = True
for path, desc in files.items():
if os.path.exists(path):
size = os.path.getsize(path)
print(f"{desc:20s} - {path} ({size} bytes)")
else:
print(f"{desc:20s} - {path} (不存在)")
all_exist = False
return all_exist
def show_instructions():
"""显示使用说明"""
print("\n" + "=" * 60)
print("📖 使用说明")
print("=" * 60)
print("\n1⃣ 启动后端服务:")
print(" cd server")
print(" python3 app.py")
print("\n2⃣ 访问登录页面:")
print(" http://localhost:5000/login.html")
print(" ⚠️ 注意:不是 login-preview.html")
print("\n3⃣ 使用以下账号登录:")
print(" - tz (超级管理员)")
print(" - 张正浩 (超级管理员)")
print(" - admin (管理员)")
print(" - 黄有想 (管理员)")
print("\n4⃣ 如果忘记密码,重置密码:")
print(" python3 reset_password.py <用户名> <新密码>")
print("\n5⃣ 清除浏览器缓存:")
print(" Chrome/Edge: Ctrl+Shift+Delete")
print(" 或者使用无痕模式: Ctrl+Shift+N")
def create_reset_script():
"""创建密码重置脚本"""
script = '''#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
密码重置脚本
用法: python3 reset_password.py <用户名> <新密码>
"""
import sys
import sqlite3
from werkzeug.security import generate_password_hash
if len(sys.argv) != 3:
print("用法: python3 reset_password.py <用户名> <新密码>")
sys.exit(1)
username = sys.argv[1]
new_password = sys.argv[2]
DB_PATH = 'server/data.db'
try:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
# 检查用户是否存在
user = c.execute('SELECT id FROM users WHERE username = ?', (username,)).fetchone()
if not user:
print(f"❌ 用户 '{username}' 不存在")
print("\\n现有用户:")
users = c.execute('SELECT username FROM users').fetchall()
for u in users:
print(f" - {u[0]}")
sys.exit(1)
# 更新密码
password_hash = generate_password_hash(new_password)
c.execute('UPDATE users SET password_hash = ? WHERE username = ?', (password_hash, username))
conn.commit()
print(f"✅ 用户 '{username}' 的密码已重置")
print(f" 新密码: {new_password}")
conn.close()
except Exception as e:
print(f"❌ 错误: {e}")
sys.exit(1)
'''
with open('reset_password.py', 'w', encoding='utf-8') as f:
f.write(script)
os.chmod('reset_password.py', 0o755)
print("\n✅ 已创建密码重置脚本: reset_password.py")
def main():
print("\n" + "🔐 登录问题诊断工具".center(60, "="))
print()
db_ok = check_database()
files_ok = check_files()
server_ok = check_server()
print("\n" + "=" * 60)
print("📊 诊断结果")
print("=" * 60)
if db_ok and files_ok:
print("✅ 数据库和文件都正常")
if server_ok:
print("✅ 服务器正在运行")
print("\n💡 如果仍然无法登录,请尝试:")
print(" 1. 清除浏览器缓存")
print(" 2. 使用无痕模式")
print(" 3. 检查浏览器控制台的错误信息")
print(" 4. 确认访问的是 login.html 而不是 login-preview.html")
else:
print("❌ 服务器未运行,请先启动服务器")
else:
print("❌ 发现问题,请检查上述错误信息")
show_instructions()
create_reset_script()
print("\n" + "=" * 60)
print()
if __name__ == '__main__':
main()