deep-risk/backend/scripts/setup_test_users_simple.py
2025-12-14 20:08:27 +08:00

186 lines
6.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
创建测试用户(简化版)
直接使用预设的密码哈希值
"""
import asyncio
import sys
import os
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app.config import settings
# 使用预设的bcrypt哈希值密码: password123
# 这是通过 bcrypt.hashpw(b'password123', bcrypt.gensalt()).decode() 生成的
PASSWORD_HASH = "$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj8dJJC1V2bS"
async def create_test_users():
"""创建测试用户"""
print("="*60)
print("创建测试用户并设置实体关联(简化版)")
print("="*60)
# 创建数据库引擎
engine = create_async_engine(
settings.DATABASE_URL,
echo=False,
future=True,
)
async with engine.connect() as conn:
try:
# 1. 创建主播测试用户
print("\n1. 创建主播测试用户...")
# 主播用户1
await conn.execute(text("""
INSERT INTO sys_user (
username, password, full_name, email,
is_active, is_superuser, created_at, updated_at,
entity_id, entity_type
)
VALUES (
'streamer1', :password, '测试主播1', 'streamer1@test.com',
true, false, now(), now(),
'streamer_TEST_001', 'streamer'
)
ON CONFLICT (username) DO UPDATE
SET password = EXCLUDED.password,
entity_id = EXCLUDED.entity_id,
entity_type = EXCLUDED.entity_type,
updated_at = now();
"""), {"password": PASSWORD_HASH})
print(" ✅ 主播用户 streamer1 已创建/更新")
# 主播用户2
await conn.execute(text("""
INSERT INTO sys_user (
username, password, full_name, email,
is_active, is_superuser, created_at, updated_at,
entity_id, entity_type
)
VALUES (
'streamer2', :password, '测试主播2', 'streamer2@test.com',
true, false, now(), now(),
'streamer_TEST_002', 'streamer'
)
ON CONFLICT (username) DO UPDATE
SET password = EXCLUDED.password,
entity_id = EXCLUDED.entity_id,
entity_type = EXCLUDED.entity_type,
updated_at = now();
"""), {"password": PASSWORD_HASH})
print(" ✅ 主播用户 streamer2 已创建/更新")
# 2. 创建MCN测试用户
print("\n2. 创建MCN测试用户...")
await conn.execute(text("""
INSERT INTO sys_user (
username, password, full_name, email,
is_active, is_superuser, created_at, updated_at,
entity_id, entity_type
)
VALUES (
'mcn_admin', :password, 'MCN管理员', 'mcn_admin@test.com',
true, false, now(), now(),
'mcn_TEST_001', 'mcn'
)
ON CONFLICT (username) DO UPDATE
SET password = EXCLUDED.password,
entity_id = EXCLUDED.entity_id,
entity_type = EXCLUDED.entity_type,
updated_at = now();
"""), {"password": PASSWORD_HASH})
print(" ✅ MCN用户 mcn_admin 已创建/更新")
# 3. 验证用户创建
print("\n3. 验证用户数据...")
result = await conn.execute(text("""
SELECT username, full_name, entity_id, entity_type, is_active
FROM sys_user
WHERE username IN ('streamer1', 'streamer2', 'mcn_admin')
ORDER BY username;
"""))
users = result.fetchall()
if users:
print(f"{len(users)} 个测试用户:")
for user in users:
status = '✅ 活跃' if user[4] else '❌ 禁用'
print(f" - {user[0]} ({user[1]}): {user[2]} - {user[3]} - {status}")
else:
print(" ❌ 没有找到测试用户")
# 4. 检查streamer数据
print("\n4. 检查streamer数据...")
result = await conn.execute(text("""
SELECT COUNT(*) FROM streamer WHERE streamer_id IN ('streamer_TEST_001', 'streamer_TEST_002');
"""))
streamer_count = result.scalar()
if streamer_count > 0:
print(f" ✅ 找到 {streamer_count} 个streamer记录")
else:
print(" ⚠️ 未找到streamer记录")
# 提交事务
await conn.commit()
print("\n" + "="*60)
print("✅ 测试用户创建完成!")
print("="*60)
print("\n📝 测试用户信息:")
print(" 主播用户:")
print(" - 用户名: streamer1 / 密码: password123")
print(" - 用户名: streamer2 / 密码: password123")
print(" MCN用户:")
print(" - 用户名: mcn_admin / 密码: password123")
print("\n📝 使用方法:")
print(" 1. 访问前端页面: http://localhost:3000")
print(" 2. 使用上述用户名和密码登录")
print(" 3. 测试自动实体绑定功能")
return True
except Exception as e:
print(f"\n❌ 创建用户失败: {str(e)}")
import traceback
traceback.print_exc()
await conn.rollback()
return False
finally:
await engine.dispose()
async def main():
"""主函数"""
try:
success = await create_test_users()
if success:
print("\n✅ 所有操作已成功完成")
sys.exit(0)
else:
print("\n❌ 操作过程中出现问题")
sys.exit(1)
except Exception as e:
print(f"\n❌ 执行失败: {str(e)}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
asyncio.run(main())