AI掘金头条新闻系统 (Toutiao News)-用户注册-生成Token

1. crud/users.py

python 复制代码
# 生成 Token
async def create_token(db: AsyncSession, user_id: int):
    # 生成 Token
    token = str(uuid.uuid4())

    # 设置过期时间
    expires_at = datetime.now() + timedelta(days=7)

    # 查询数据库当前用户是否有 Token
    query = select(UserToken).where(UserToken.user_id == user_id)
    result = await db.execute(query)
    user_token = result.scalar_one_or_none()

    # 有:更新
    if user_token:
        user_token.token = token
        user_token.expires_at = expires_at
        await db.commit()
    # 没有: 添加
    else:
        user_token = UserToken(user_id=user_id, token=token, expires_at=expires_at)
        db.add(user_token)
        await db.commit()

    return token

2. routers/users.py

python 复制代码
# 生成 Token
token = await users.create_token(db, user.id)

完整代码

python 复制代码
from fastapi import APIRouter
from fastapi.params import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from common.result import Result
from config.db_confing import get_db
from schemas.users import UserRequest
from crud import users

router = APIRouter(prefix="/api/user", tags=["users"])


# 用户注册
@router.post("register")
async def register(user_data: UserRequest, db: AsyncSession = Depends(get_db)):
    # 根据用户名查询数据库
    db_user = await users.get_user_by_username(db, user_data.username)
    if db_user:
        return Result.error("用户已存在", 400)

    # 新增用户
    user = await users.create_user(db, user_data)

    # 生成 Token
    token = await users.create_token(db, user.id)

    return {
        "code": 200,
        "message": "注册成功",
        "data": {
            "token": token,
            "userInfo": {
                "id": user.id,
                "username": user_data.username,
                "bio": user.bio,
                "avatar": user.avatar
            }
        }
    }
相关推荐
回家路上绕了弯1 小时前
Java双数据源实战全指南:Spring Boot多数据源配置、原理与踩坑避坑
后端
神奇小汤圆1 小时前
Redis主从切换后,旧主恢复竟触发全量同步?——我猜错了,原因比想象中更严谨
后端
JoyT2 小时前
滚动MAD与孤立森林在时序异常检测中的协同应用
后端
程序员cxuan2 小时前
白嫖 Claude Max 20x 漏洞完整事件始末
人工智能·后端·程序员
猫头虎2 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作
颜进强2 小时前
LangChain 从入门到实践:用最小案例理解 RAG 的 5 个核心抽象
前端·后端·ai编程
颜进强2 小时前
MCP 从入门到实践:用 TypeScript 实现第一个 MCP Server
前端·后端·ai编程
Undoom2 小时前
用搜索引擎 API 搭一个 SEO 关键词监控工具:定时追踪排名、广告和相关搜索
后端
程序大爆炸2 小时前
gcsfuse的TypeCache
后端
心运软件2 小时前
Python实战:中国大学排行榜数据采集与可视化大屏
后端·python