OAuth2PasswordBearer 是 FastAPI 提供的一种用于处理基于 Token 认证的机制,它本身不做认证,只负责:从请求头里提取 Token,并交给后续函数验证。

oauth2_scheme = OAuth2PasswordBearer(tokenUrl=”api/auth/login”)

参数 含义
tokenUrl 指明你的 Token 获取接口在哪(用户登录时用)
  • 它不会帮你登录,也不会生成 Token,只是告诉 FastAPI —— 登录拿 Token 的接口在哪里。
  • 一般就是你的登录接口,比如 /api/auth/login。

核心工作

作用 说明
1. 提取Token 从请求头 Authorization: Bearer <token> 中拿到 token
2. 自动校验格式 必须是 Bearer token,否则返回 401
3. 交给 Depends 传递给验证函数 把提取到的 token 字符串传入 get_current_user()

不会验证 Token 是否正确、是否过期、是否伪造 —— 这需要你自己写验证逻辑(通常使用 jwt.decode())。

用户请求接口:

GET /users/me
Authorization: Bearer eyJh…

流程:

  1. OAuth2PasswordBearer 自动检查请求头有没有 Authorization
  2. 提取出 eyJh… 这个 token 字符串
  3. 传给 token: str = Depends(oauth2_scheme)
  4. 你的验证函数(如 get_current_user)再去真正验证 Token

示例

from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt

oauth2_scheme = OAuth2PasswordBearer(tokenUrl=”/api/auth/login”)

SECRET_KEY = “your_secret_key”
ALGORITHM = “HS256”

# 通过JWT获取当前用户ID
def get_current_user(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        user_id: int = payload.get(“user_id”)
        if user_id is None:
            raise HTTPException(status_code=401, detail=”Invalid token”)
        return user_id
    except JWTError:
        raise HTTPException(status_code=401, detail=”Invalid token”)

在接口里使用:

@app.get(“/users/me”)
def read_users_me(current_user=Depends(get_current_user)):
return {“user”: current_user}

作者 admin

百度广告效果展示