diff --git a/backend/app/db/session.py b/backend/app/db/session.py index 4f0e0404..8fa9b3b4 100644 --- a/backend/app/db/session.py +++ b/backend/app/db/session.py @@ -72,25 +72,43 @@ async def seed_default_datasources(session: AsyncSession): await session.commit() +DEFAULT_LOGIN_USERS = ( + { + "username": "admin", + "email": "admin@planet.local", + "password": "admin123", + "role": "super_admin", + }, + { + "username": "linkong", + "email": "linkong@planet.local", + "password": "12345678", + "role": "super_admin", + }, +) + + async def ensure_default_admin_user(session: AsyncSession): from app.core.security import get_password_hash from app.models.user import User - result = await session.execute( - text("SELECT id FROM users WHERE username = 'admin'") - ) - if result.fetchone(): - return - - session.add( - User( - username="admin", - email="admin@planet.local", - password_hash=get_password_hash("admin123"), - role="super_admin", - is_active=True, + for default_user in DEFAULT_LOGIN_USERS: + result = await session.execute( + text("SELECT id FROM users WHERE username = :username"), + {"username": default_user["username"]}, + ) + if result.fetchone(): + continue + + session.add( + User( + username=default_user["username"], + email=default_user["email"], + password_hash=get_password_hash(default_user["password"]), + role=default_user["role"], + is_active=True, + ) ) - ) await session.commit() diff --git a/backend/scripts/create_admin.py b/backend/scripts/create_admin.py index c9ca713d..f2a1ae4c 100644 --- a/backend/scripts/create_admin.py +++ b/backend/scripts/create_admin.py @@ -17,15 +17,16 @@ async def create_admin(): existing_user = result.scalar_one_or_none() if existing_user: - print(f"用户 linkong 已存在,更新密码...") - existing_user.set_password("LK12345678") + print("用户 linkong 已存在,更新密码...") + existing_user.set_password("12345678") existing_user.role = "super_admin" + existing_user.email = "linkong@planet.local" else: print("创建管理员用户...") user = User( username="linkong", - email="linkong@example.com", - password_hash=get_password_hash("LK12345678"), + email="linkong@planet.local", + password_hash=get_password_hash("12345678"), role="super_admin", is_active=True, ) diff --git a/backend/scripts/init_admin.py b/backend/scripts/init_admin.py index 62889cba..316286b2 100644 --- a/backend/scripts/init_admin.py +++ b/backend/scripts/init_admin.py @@ -6,29 +6,58 @@ import sys sys.path.insert(0, ".") from app.core.security import get_password_hash -from app.db.session import engine, async_session_factory +from app.db.session import async_session_factory from app.models.user import User +DEFAULT_LOGIN_USERS = ( + { + "username": "admin", + "email": "admin@planet.local", + "password": "admin123", + "role": "super_admin", + }, + { + "username": "linkong", + "email": "linkong@planet.local", + "password": "12345678", + "role": "super_admin", + }, +) + async def create_admin(): from sqlalchemy import text async with async_session_factory() as session: - result = await session.execute(text("SELECT id FROM users WHERE username = 'admin'")) - if result.fetchone(): - print("Admin user already exists") + created = [] + for default_user in DEFAULT_LOGIN_USERS: + result = await session.execute( + text("SELECT id FROM users WHERE username = :username"), + {"username": default_user["username"]}, + ) + if result.fetchone(): + continue + + session.add( + User( + username=default_user["username"], + email=default_user["email"], + password_hash=get_password_hash(default_user["password"]), + role=default_user["role"], + is_active=True, + ) + ) + created.append(default_user) + + await session.commit() + if not created: + print("Default login users already exist") return - admin = User( - username="admin", - email="admin@planet.local", - password_hash=get_password_hash("admin123"), - role="super_admin", - is_active=True, - ) - session.add(admin) - await session.commit() - print("Admin user created: admin / admin123") + for default_user in created: + print( + f"Default login user created: {default_user['username']} / {default_user['password']}" + ) if __name__ == "__main__": diff --git a/backend/scripts/init_db.py b/backend/scripts/init_db.py index 79ac498b..e101c3d3 100644 --- a/backend/scripts/init_db.py +++ b/backend/scripts/init_db.py @@ -12,8 +12,20 @@ from sqlalchemy.orm import sessionmaker import bcrypt -# Generate proper bcrypt hash -ADMIN_PASSWORD_HASH = bcrypt.hashpw("admin123".encode(), bcrypt.gensalt()).decode() +DEFAULT_LOGIN_USERS = ( + { + "username": "admin", + "email": "admin@planet.local", + "password": "admin123", + "role": "super_admin", + }, + { + "username": "linkong", + "email": "linkong@planet.local", + "password": "12345678", + "role": "super_admin", + }, +) async def create_admin(): @@ -22,23 +34,42 @@ async def create_admin(): async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async with async_session() as session: - result = await session.execute( - text("SELECT id FROM users WHERE username = 'admin'") - ) - if result.fetchone(): - print("Admin user already exists") + created = [] + for default_user in DEFAULT_LOGIN_USERS: + result = await session.execute( + text("SELECT id FROM users WHERE username = :username"), + {"username": default_user["username"]}, + ) + if result.fetchone(): + continue + + password_hash = bcrypt.hashpw( + default_user["password"].encode(), bcrypt.gensalt() + ).decode() + await session.execute( + text(""" + INSERT INTO users (username, email, password_hash, role, is_active, created_at, updated_at) + VALUES (:username, :email, :password, :role, true, NOW(), NOW()) + """), + { + "username": default_user["username"], + "email": default_user["email"], + "password": password_hash, + "role": default_user["role"], + }, + ) + created.append((default_user, password_hash)) + + await session.commit() + if not created: + print("Default login users already exist") return - await session.execute( - text(""" - INSERT INTO users (username, email, password_hash, role, is_active, created_at, updated_at) - VALUES ('admin', 'admin@planet.local', :password, 'super_admin', true, NOW(), NOW()) - """), - {"password": ADMIN_PASSWORD_HASH}, - ) - await session.commit() - print(f"Admin user created: admin / admin123") - print(f"Hash: {ADMIN_PASSWORD_HASH}") + for default_user, password_hash in created: + print( + f"Default login user created: {default_user['username']} / {default_user['password']}" + ) + print(f"Hash: {password_hash}") if __name__ == "__main__": diff --git a/scripts/init_db.py b/scripts/init_db.py index 3bfc9371..33fac9e7 100644 --- a/scripts/init_db.py +++ b/scripts/init_db.py @@ -13,7 +13,20 @@ from sqlalchemy.orm import sessionmaker import bcrypt -ADMIN_PASSWORD_HASH = bcrypt.hashpw("admin123".encode(), bcrypt.gensalt()).decode() +DEFAULT_LOGIN_USERS = ( + { + "username": "admin", + "email": "admin@planet.local", + "password": "admin123", + "role": "super_admin", + }, + { + "username": "linkong", + "email": "linkong@planet.local", + "password": "12345678", + "role": "super_admin", + }, +) async def create_admin(): @@ -24,21 +37,42 @@ async def create_admin(): async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async with async_session() as session: - result = await session.execute(text("SELECT id FROM users WHERE username = 'admin'")) - if result.fetchone(): - print("Admin user already exists") + created = [] + for default_user in DEFAULT_LOGIN_USERS: + result = await session.execute( + text("SELECT id FROM users WHERE username = :username"), + {"username": default_user["username"]}, + ) + if result.fetchone(): + continue + + password_hash = bcrypt.hashpw( + default_user["password"].encode(), bcrypt.gensalt() + ).decode() + await session.execute( + text(""" + INSERT INTO users (username, email, password_hash, role, is_active, created_at, updated_at) + VALUES (:username, :email, :password, :role, true, NOW(), NOW()) + """), + { + "username": default_user["username"], + "email": default_user["email"], + "password": password_hash, + "role": default_user["role"], + }, + ) + created.append((default_user, password_hash)) + + await session.commit() + if not created: + print("Default login users already exist") return - await session.execute( - text(""" - INSERT INTO users (username, email, password_hash, role, is_active, created_at, updated_at) - VALUES ('admin', 'admin@planet.local', :password, 'super_admin', true, NOW(), NOW()) - """), - {"password": ADMIN_PASSWORD_HASH}, - ) - await session.commit() - print(f"Admin user created: admin / admin123") - print(f"Hash: {ADMIN_PASSWORD_HASH}") + for default_user, password_hash in created: + print( + f"Default login user created: {default_user['username']} / {default_user['password']}" + ) + print(f"Hash: {password_hash}") if __name__ == "__main__":