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
            }
        }
    }
相关推荐
自珍JAVA13 小时前
访问者模式:让你的代码优雅地“拜访”对象结构
后端
ZFSS14 小时前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
TechWayfarer14 小时前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?
开发语言·网络·python·网络协议·tcp/ip
程序员榴莲14 小时前
Python 单例模式
开发语言·python·单例模式
hh.h.14 小时前
昇腾CANN ops-transformer 仓的 MC2 算子:MoE 模型的全到全通信
python·深度学习·transformer·cann
毅航15 小时前
AI 浪潮下,会用工具不等于具备能力
后端·程序员·ai编程
比特森林探险记16 小时前
go 语言中的context 解读和用法
开发语言·后端·golang
NiceCloud喜云16 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书