diff --git a/requirements.txt b/requirements.txt index 91fdacb..8d35e54 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,3 +38,6 @@ jinja2 # JWT认证 python-jose[cryptography] passlib[bcrypt] + +# 邮箱验证 +email-validator diff --git a/src/database/init_db.py b/src/database/init_db.py index 82c81b1..edf7dbc 100644 --- a/src/database/init_db.py +++ b/src/database/init_db.py @@ -2,18 +2,49 @@ import asyncio from database.database import db_manager from utils.logger import get_logger +from sqlalchemy import select +from models.database import User +from services.auth_service import get_password_hash logger = get_logger(__name__) + +async def create_default_admin(): + """创建默认管理员账户""" + try: + async with db_manager.session() as session: + result = await session.execute( + select(User).where(User.username == "admin") + ) + existing_admin = result.scalar_one_or_none() + + if existing_admin: + logger.info("管理员账户已存在") + return + + admin = User( + username="admin", + email="admin@gemold.com", + hashed_password=get_password_hash("admin123"), + full_name="系统管理员", + is_active=True, + is_superuser=True + ) + + session.add(admin) + await session.commit() + logger.info("默认管理员账户创建成功 (用户名: admin, 密码: admin123)") + + except Exception as e: + logger.error(f"创建默认管理员失败: {e}") + + async def init_database(): """初始化数据库""" try: - # 连接数据库 await db_manager.connect() - - # 创建表 await db_manager.create_tables() - + await create_default_admin() logger.info("数据库初始化完成") return True diff --git a/src/scripts/create_admin.py b/src/scripts/create_admin.py new file mode 100644 index 0000000..daa1616 --- /dev/null +++ b/src/scripts/create_admin.py @@ -0,0 +1,59 @@ +import asyncio +from sqlalchemy import select +from database.database import db_manager +from models.database import User +from services.auth_service import get_password_hash +from utils.logger import get_logger + +logger = get_logger(__name__) + + +async def create_admin_user(): + """创建默认管理员账户""" + try: + await db_manager.connect() + + async with db_manager.session() as session: + result = await session.execute( + select(User).where(User.username == "admin") + ) + existing_admin = result.scalar_one_or_none() + + if existing_admin: + logger.info("管理员账户已存在") + print("管理员账户已存在") + print("用户名: admin") + return + + admin = User( + username="admin", + email="admin@gemold.com", + hashed_password=get_password_hash("admin123"), + full_name="系统管理员", + is_active=True, + is_superuser=True + ) + + session.add(admin) + await session.commit() + + logger.info("管理员账户创建成功") + print("=" * 50) + print("管理员账户创建成功!") + print("=" * 50) + print("用户名: admin") + print("密码: admin123") + print("邮箱: admin@gemold.com") + print("=" * 50) + print("⚠️ 请登录后立即修改密码!") + print("=" * 50) + + except Exception as e: + logger.error(f"创建管理员账户失败: {e}") + print(f"创建管理员账户失败: {e}") + finally: + await db_manager.disconnect() + + +if __name__ == "__main__": + asyncio.run(create_admin_user())