fix: 添加auth功能

This commit is contained in:
root
2025-07-12 18:01:17 +08:00
parent 41363d182e
commit e4d4677f3a
12 changed files with 1725 additions and 91 deletions

316
test_auth_system.py Normal file
View File

@@ -0,0 +1,316 @@
#!/usr/bin/env python3
"""
测试Python用户认证系统
"""
import sys
import os
sys.path.insert(0, '/root/projects/mixvideo_v2')
from python_core.api.auth_api import auth_api
from python_core.utils.jwt_auth import jwt_auth
from python_core.services.user_storage import user_storage
def test_user_registration():
"""测试用户注册"""
print("🧪 测试用户注册...")
try:
# 注册测试用户
result = auth_api.register({
"username": "testuser",
"email": "test@example.com",
"password": "password123",
"display_name": "测试用户"
})
if result["success"]:
print(f"✅ 注册成功: {result['data']['user']['username']}")
print(f" 用户ID: {result['data']['user']['id']}")
print(f" Token: {result['data']['token'][:50]}...")
return result['data']['token']
else:
print(f"❌ 注册失败: {result['message']}")
return None
except Exception as e:
print(f"❌ 注册测试失败: {e}")
return None
def test_user_login():
"""测试用户登录"""
print("\n🧪 测试用户登录...")
try:
# 登录测试用户
result = auth_api.login({
"username_or_email": "testuser",
"password": "password123"
})
if result["success"]:
print(f"✅ 登录成功: {result['data']['user']['username']}")
print(f" 显示名称: {result['data']['user']['display_name']}")
print(f" Token: {result['data']['token'][:50]}...")
return result['data']['token']
else:
print(f"❌ 登录失败: {result['message']}")
return None
except Exception as e:
print(f"❌ 登录测试失败: {e}")
return None
def test_token_verification(token):
"""测试Token验证"""
print("\n🧪 测试Token验证...")
try:
# 验证token
result = auth_api.verify_token({
"token": token
})
if result["success"]:
user = result['data']['user']
print(f"✅ Token验证成功: {user['username']}")
print(f" 用户ID: {user['user_id']}")
print(f" 邮箱: {user['email']}")
# 获取token详细信息
token_info = jwt_auth.get_token_info(token)
print(f" Token有效性: {token_info['valid']}")
print(f" 剩余时间: {token_info['time_remaining']}")
return True
else:
print(f"❌ Token验证失败: {result['message']}")
return False
except Exception as e:
print(f"❌ Token验证测试失败: {e}")
return False
def test_get_current_user(token):
"""测试获取当前用户"""
print("\n🧪 测试获取当前用户...")
try:
# 获取当前用户
result = auth_api.get_current_user({
"token": token
})
if result["success"]:
user = result['data']['user']
print(f"✅ 获取用户成功: {user['username']}")
print(f" 显示名称: {user['display_name']}")
print(f" 创建时间: {user['created_at']}")
print(f" 最后登录: {user['last_login']}")
return True
else:
print(f"❌ 获取用户失败: {result['message']}")
return False
except Exception as e:
print(f"❌ 获取用户测试失败: {e}")
return False
def test_user_storage():
"""测试用户存储"""
print("\n🧪 测试用户存储...")
try:
# 获取所有用户
users = user_storage.get_all_users()
print(f"✅ 获取到 {len(users)} 个用户")
# 获取用户统计
stats = user_storage.get_user_count()
print(f" 总用户数: {stats['total']}")
print(f" 活跃用户: {stats['active']}")
print(f" 禁用用户: {stats['inactive']}")
# 搜索用户
search_results = user_storage.search_users("test")
print(f" 搜索'test'找到 {len(search_results)} 个用户")
return True
except Exception as e:
print(f"❌ 用户存储测试失败: {e}")
return False
def test_duplicate_registration():
"""测试重复注册"""
print("\n🧪 测试重复注册...")
try:
# 尝试重复注册
result = auth_api.register({
"username": "testuser",
"email": "test@example.com",
"password": "password123",
"display_name": "重复用户"
})
if not result["success"]:
print(f"✅ 正确阻止重复注册: {result['message']}")
return True
else:
print(f"❌ 未能阻止重复注册")
return False
except Exception as e:
print(f"❌ 重复注册测试失败: {e}")
return False
def test_invalid_login():
"""测试无效登录"""
print("\n🧪 测试无效登录...")
try:
# 尝试错误密码登录
result = auth_api.login({
"username_or_email": "testuser",
"password": "wrongpassword"
})
if not result["success"]:
print(f"✅ 正确拒绝错误密码: {result['message']}")
else:
print(f"❌ 未能拒绝错误密码")
return False
# 尝试不存在的用户登录
result = auth_api.login({
"username_or_email": "nonexistentuser",
"password": "password123"
})
if not result["success"]:
print(f"✅ 正确拒绝不存在用户: {result['message']}")
return True
else:
print(f"❌ 未能拒绝不存在用户")
return False
except Exception as e:
print(f"❌ 无效登录测试失败: {e}")
return False
def test_jwt_features():
"""测试JWT特性"""
print("\n🧪 测试JWT特性...")
try:
# 生成token
token_info = jwt_auth.generate_token("test_user_id", "testuser", "test@example.com")
token = token_info["token"]
print(f"✅ 生成Token成功")
print(f" 过期时间: {token_info['expires_at']}")
print(f" 有效期: {token_info['expires_in']}")
# 验证token
payload = jwt_auth.verify_token(token)
if payload:
print(f"✅ Token验证成功")
print(f" 用户ID: {payload['user_id']}")
print(f" 用户名: {payload['username']}")
print(f" 签发者: {payload['iss']}")
else:
print(f"❌ Token验证失败")
return False
# 获取token信息
info = jwt_auth.get_token_info(token)
print(f"✅ Token信息获取成功")
print(f" 有效性: {info['valid']}")
print(f" 剩余时间: {info['time_remaining']}")
return True
except Exception as e:
print(f"❌ JWT特性测试失败: {e}")
return False
def main():
"""主测试函数"""
print("🚀 开始测试Python用户认证系统...")
test_results = []
# 测试JWT特性
test_results.append(("JWT特性", test_jwt_features()))
# 测试用户注册
token = test_user_registration()
test_results.append(("用户注册", token is not None))
if token:
# 测试Token验证
test_results.append(("Token验证", test_token_verification(token)))
# 测试获取当前用户
test_results.append(("获取当前用户", test_get_current_user(token)))
# 测试用户登录
login_token = test_user_login()
test_results.append(("用户登录", login_token is not None))
# 测试用户存储
test_results.append(("用户存储", test_user_storage()))
# 测试重复注册
test_results.append(("重复注册检查", test_duplicate_registration()))
# 测试无效登录
test_results.append(("无效登录检查", test_invalid_login()))
# 显示测试结果
print("\n📊 测试结果汇总:")
print("=" * 50)
passed = 0
total = len(test_results)
for test_name, result in test_results:
status = "✅ 通过" if result else "❌ 失败"
print(f"{test_name:20} {status}")
if result:
passed += 1
print("=" * 50)
print(f"总计: {passed}/{total} 个测试通过")
if passed == total:
print("\n🎉 所有测试通过Python用户认证系统工作正常")
print("\n📖 使用方法:")
print(" # 注册用户")
print(" python3 -m python_core.cli auth register username email@example.com")
print(" # 登录用户")
print(" python3 -m python_core.cli auth login username")
print(" # 验证Token")
print(" python3 -m python_core.cli auth verify <token>")
print(" # 查看用户列表")
print(" python3 -m python_core.cli auth list")
print(" # 查看统计信息")
print(" python3 -m python_core.cli auth stats")
else:
print(f"\n{total - passed} 个测试失败!")
sys.exit(1)
if __name__ == "__main__":
main()