imetting_backend/test/test_login_debug.py

128 lines
4.0 KiB
Python
Raw Normal View History

2025-08-29 08:37:29 +00:00
#!/usr/bin/env python3
"""
登录调试脚本 - 诊断JWT认证问题
运行方法:
cd /Users/jiliu/工作/projects/imeeting/backend
source venv/bin/activate # 激活虚拟环境
python test/test_login_debug.py
"""
import sys
import os
import requests
import json
# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
BASE_URL = "http://127.0.0.1:8000"
# 禁用代理以避免本地请求被代理
PROXIES = {'http': None, 'https': None}
def test_backend_connection():
"""测试后端连接"""
try:
response = requests.get(f"{BASE_URL}/", proxies=PROXIES)
print(f"✅ 后端服务连接成功: {response.status_code}")
return True
except requests.exceptions.ConnectionError:
print("❌ 无法连接到后端服务")
return False
def test_login_with_debug(username, password):
"""详细的登录测试"""
print(f"\n=== 测试登录: {username} ===")
login_data = {
"username": username,
"password": password
}
try:
print(f"请求URL: {BASE_URL}/api/auth/login")
print(f"请求数据: {json.dumps(login_data, ensure_ascii=False)}")
response = requests.post(f"{BASE_URL}/api/auth/login", json=login_data, proxies=PROXIES)
print(f"响应状态码: {response.status_code}")
print(f"响应头: {dict(response.headers)}")
if response.status_code == 200:
user_data = response.json()
print("✅ 登录成功!")
print(f"用户信息: {json.dumps(user_data, ensure_ascii=False, indent=2)}")
return user_data.get("token")
else:
print("❌ 登录失败")
print(f"错误内容: {response.text}")
return None
except Exception as e:
print(f"❌ 请求异常: {e}")
return None
def test_authenticated_request(token):
"""测试认证请求"""
if not token:
print("❌ 没有有效token跳过认证测试")
return
print(f"\n=== 测试认证请求 ===")
headers = {"Authorization": f"Bearer {token}"}
try:
# 测试 /api/auth/me
print("测试 /api/auth/me")
response = requests.get(f"{BASE_URL}/api/auth/me", headers=headers, proxies=PROXIES)
print(f"状态码: {response.status_code}")
if response.status_code == 200:
print("✅ 认证请求成功")
print(f"用户信息: {json.dumps(response.json(), ensure_ascii=False, indent=2)}")
else:
print("❌ 认证请求失败")
print(f"错误: {response.text}")
except Exception as e:
print(f"❌ 认证请求异常: {e}")
def check_database_users():
"""检查数据库用户"""
try:
from app.core.database import get_db_connection
print(f"\n=== 检查数据库用户 ===")
with get_db_connection() as connection:
cursor = connection.cursor(dictionary=True)
cursor.execute("SELECT user_id, username, caption, email FROM users LIMIT 10")
users = cursor.fetchall()
print(f"数据库中的用户 (前10个):")
for user in users:
print(f" - ID: {user['user_id']}, 用户名: {user['username']}, 名称: {user['caption']}")
except Exception as e:
print(f"❌ 无法访问数据库: {e}")
if __name__ == "__main__":
print("JWT登录调试工具")
print("=" * 50)
# 1. 测试后端连接
if not test_backend_connection():
exit(1)
# 2. 检查数据库用户
check_database_users()
# 3. 测试登录
username = input("\n请输入用户名 (默认: mula): ").strip() or "mula"
password = input("请输入密码 (默认: 781126): ").strip() or "781126"
token = test_login_with_debug(username, password)
# 4. 测试认证请求
test_authenticated_request(token)
print("\n=== 调试完成 ===")