AI掘金头条新闻系统 (Toutiao News)-获取用户信息

1. crud/users.py

python 复制代码
# 根据 Token 查询用户:验证 Token -> 查询用户
async def get_user_by_token(db: AsyncSession, token: str):
    query = select(UserToken).where(UserToken.token == token)
    result = await db.execute(query)
    db_token = result.scalar_one_or_none()

    if not db_token or db_token.expires_at < datetime.now():
        return None

    query = select(User).where(User.id == db_token.user_id)
    result = await db.execute(query)
    return result.scalar_one_or_none()

2. utils/auth.py

python 复制代码
from fastapi import Header, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from starlette import status
from config.db_confing import get_db
from crud import users


# 整合 根据 Token 查询用户,返回用户
async def get_current_user(
        authorization: str = Header(..., alias="Authorization"),
        db: AsyncSession = Depends(get_db)
):
    # Bearer xxxxx
    # token = authorization.split(" ")[1]
    token = authorization.replace("Bearer ", "")
    user = await users.get_user_by_token(db, token)
    if not user:
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的令牌或已经过期的令牌")

    return user

3. routers/users.py

python 复制代码
# 查 Token 查用户 -> 封装 crud -> 功能整合成一个工具函数 -> 路由导入使用:依赖注入
@router.get("/info")
async def get_user_info(user: User = Depends(get_current_user)):
    return success_response(
        message="获取用户信息成功",
        data=UserInfoResponse.model_validate(user)
    )
相关推荐
犀利豆20 小时前
Claude code tools 研究系列(二)EnterPlanMode
人工智能·后端
alphaTao20 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode
用户693717500138420 小时前
AI时代,程序员该往哪走?
前端·后端
Kevin Wang72720 小时前
Nvidia-AGX-spark部署手册——课堂质量诊断(jetpack:r36)
python·docker·容器
每天都要进步哦20 小时前
SQL单行函数详解:字符、数字、日期、转换与通用函数全解析
数据库·mysql
Revolution6120 小时前
第一次运行 Node.js:终端里的 JavaScript 怎样执行
后端·面试·node.js
Python私教21 小时前
Django 6.1 RC1 实测:FETCH_PEERS 两条 SQL 解决 N+1,select_related 还需要吗?
后端·python·django
大侠在此在在此21 小时前
教你用最简单的数学自底向上地高效学习SQL注入
后端
玉鸯21 小时前
Agent 的任务编排:从 System Prompt 到 Hierarchical Multi-Agent
python·llm·agent
Python私教21 小时前
Django 6.0 自带 Tasks 到底能不能替代 Celery?跑完 3 组后台任务后我有答案了
后端·python·django