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
            }
        }
    }
相关推荐
爱勇宝10 小时前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
Lyn_Li11 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
白帽小丑11 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
金銀銅鐵11 小时前
费马小定理
python·数学·算法
Dxy123931021612 小时前
MySQL索引完整教程:创建、查看、修改、删除与日常管理
前端·javascript·mysql
至乐活着14 小时前
MySQL索引底层原理与查询优化实战:从B+树到执行计划
mysql·b+树·查询优化·sql性能·索引原理
IT_陈寒15 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
疋瓞15 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
易协同低代码16 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo16 小时前
Go语言学习笔记(十八)Gin处理Session
后端