#!/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=== 调试完成 ===")