""" 认证服务 提供用户注册和登录业务逻辑 """ from typing import Optional from sqlalchemy.orm import Session from ..models.user import User from ..schemas.user import UserCreate from ..utils.security import get_password_hash, verify_password def register_user(db: Session, user_data: UserCreate) -> User: """ 注册新用户 Args: db: 数据库会话 user_data: 用户注册数据 Returns: 创建的用户对象 Raises: ValueError: 用户名已存在时抛出 """ # 检查用户名是否已存在 existing_user = db.query(User).filter(User.username == user_data.username).first() if existing_user: raise ValueError("用户名已存在") # 创建新用户,密码加密存储 db_user = User( username=user_data.username, hashed_password=get_password_hash(user_data.password), nickname=user_data.nickname or user_data.username ) db.add(db_user) db.commit() db.refresh(db_user) return db_user def authenticate_user(db: Session, username: str, password: str) -> Optional[User]: """ 验证用户登录 Args: db: 数据库会话 username: 用户名 password: 明文密码 Returns: 验证成功返回用户对象,失败返回 None """ # 查询用户 user = db.query(User).filter(User.username == username).first() if not user: return None # 验证密码 if not verify_password(password, user.hashed_password): return None return user