
后端认证鉴权Web框架【免费下载链接】fastapi-usersReady-to-use and customizable users management for FastAPI项目地址https://gitcode.com/gh_mirrors/fa/fastapi-users点击查看免费下载导读本文基于 docs/configuration/full-example.md 展开为你呈现一个可直接复制运行的fastapi-users 完整示例以 JWTJSON Web Token认证为核心覆盖 SQLAlchemy 与 Beanie 两大主流数据库方案的完整工程结构。读完本文后你将掌握如何用FastAPIUsers快速装配注册、登录、登出、找回密码、邮箱验证与用户管理全套路由并理解其中每个文件、每个类、每个配置项在源码中的实际作用从而在自己的 FastAPI 项目中一键落地用户系统。⚠️安全警告原文档核心提醒示例中的SECRET常量只是一个占位符必须替换为足够强的随机口令。不安全的密钥可能让攻击者伪造任意用户的会话凭证从而获得你数据库的完全访问权限。一、示例总览一个最小可运行的 JWT 用户系统原文档提供了一份“开箱即用”的完整示例其核心组件包括组件职责main.py启动入口通过 uvicorn 运行 FastAPI 应用app/app.py创建 FastAPI 实例装配全部路由与生命周期app/db.py定义用户模型与数据库会话依赖app/schemas.py定义注册、读取、更新用的 Pydantic 模型app/users.py定义认证后端Bearer JWT、用户管理器与 FastAPIUsers 实例requirements.txt项目依赖清单示例以Bearer 传输方式 JWT 策略组合认证后端即AuthenticationBackend(namejwt, transportbearer_transport, get_strategyget_jwt_strategy)并挂载了 5 组路由认证/auth/jwt、注册/auth/register、找回密码/auth/forgot-password等、邮箱验证/auth/verify等与用户管理/users。仓库中同一套示例同时提供了 SQLAlchemy 版 与 Beanie 版 两个目录结构完全对仗便于对照学习。二、SQLAlchemy 版完整示例1. 依赖清单requirements.txtfastapi fastapi-users[sqlalchemy] uvicorn[standard] aiosqlite要点说明fastapi-users[sqlalchemy]是带SQLAlchemy 扩展的安装方式提供了SQLAlchemyUserDatabase等数据库适配组件见fastapi_users/db/目录uvicorn[standard]提供带加速与 WebSocket 支持的标准版 ASGI 服务器aiosqlite是 SQLite 的异步驱动示例默认数据库就是本地 SQLite 文件sqliteaiosqlite:///./test.db。2. 启动入口main.pyimport uvicorn if __name__ __main__: uvicorn.run(app.app:app, host0.0.0.0, log_levelinfo)通过app.app:app字符串导入应用对象便于 uvicorn 在导入时即解析依赖监听0.0.0.0日志级别info。运行方式uvicorn app.app:app --reload3. 应用装配app/app.pyfrom contextlib import asynccontextmanager from fastapi import Depends, FastAPI from app.db import User, create_db_and_tables from app.schemas import UserCreate, UserRead, UserUpdate from app.users import auth_backend, current_active_user, fastapi_users asynccontextmanager async def lifespan(app: FastAPI): # Not needed if you setup a migration system like Alembic await create_db_and_tables() yield app FastAPI(lifespanlifespan) app.include_router( fastapi_users.get_auth_router(auth_backend), prefix/auth/jwt, tags[auth] ) app.include_router( fastapi_users.get_register_router(UserRead, UserCreate), prefix/auth, tags[auth], ) app.include_router( fastapi_users.get_reset_password_router(), prefix/auth, tags[auth], ) app.include_router( fastapi_users.get_verify_router(UserRead), prefix/auth, tags[auth], ) app.include_router( fastapi_users.get_users_router(UserRead, UserUpdate), prefix/users, tags[users], ) app.get(/authenticated-route) async def authenticated_route(user: User Depends(current_active_user)): return {message: fHello {user.email}!}关键点逐条拆解lifespan 生命周期应用启动时调用create_db_and_tables()创建数据表。源码注释明确提醒——如果后续引入 Alembic 等迁移工具这一步可以省略五组路由的挂载get_auth_router(auth_backend)生成登录/登出路由get_register_router生成注册路由get_reset_password_router生成找回密码路由get_verify_router生成邮箱验证路由get_users_router生成用户 CRUD 路由。各路由的具体端点与请求/响应格式见 docs/usage/routes.md受保护路由示例/authenticated-route通过Depends(current_active_user)要求调用方携带有效 Token且用户必须是 active 状态否则请求会被拒绝。4. 数据库层app/db.pyfrom collections.abc import AsyncGenerator from fastapi import Depends from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyUserDatabase from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase DATABASE_URL sqliteaiosqlite:///./test.db class Base(DeclarativeBase): pass class User(SQLAlchemyBaseUserTableUUID, Base): pass engine create_async_engine(DATABASE_URL) async_session_maker async_sessionmaker(engine, expire_on_commitFalse) async def create_db_and_tables(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async def get_async_session() - AsyncGenerator[AsyncSession, None]: async with async_session_maker() as session: yield session async def get_user_db(session: AsyncSession Depends(get_async_session)): yield SQLAlchemyUserDatabase(session, User)说明SQLAlchemyBaseUserTableUUID是 fastapi-users 内置的以 UUID 为主键的用户表基类已包含id、email、hashed_password、is_active、is_superuser等标准字段源码位于fastapi_users/db/async_sessionmaker(engine, expire_on_commitFalse)关闭提交后过期便于在事务提交后继续读取模型属性create_db_and_tables()在启动生命周期中被调用完成建表两个生成器依赖get_async_session/get_user_db通过 FastAPI 依赖注入串联路由 → 用户管理器 → 用户数据库 → 数据库会话这一依赖链在users.py中闭合。5. 数据模型app/schemas.pyimport uuid from fastapi_users import schemas class UserRead(schemas.BaseUser[uuid.UUID]): pass class UserCreate(schemas.BaseUserCreate): pass class UserUpdate(schemas.BaseUserUpdate): passUserRead继承schemas.BaseUser[uuid.UUID]用于返回用户信息如注册响应UserCreate继承schemas.BaseUserCreate用于注册请求默认要求email与passwordUserUpdate继承schemas.BaseUserUpdate用于更新用户资料所有字段可选。6. 认证与用户管理app/users.pyimport uuid from typing import Optional from fastapi import Depends, Request from fastapi_users import BaseUserManager, FastAPIUsers, UUIDIDMixin, models from fastapi_users.authentication import ( AuthenticationBackend, BearerTransport, JWTStrategy, ) from fastapi_users.db import SQLAlchemyUserDatabase from app.db import User, get_user_db SECRET SECRET class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): reset_password_token_secret SECRET verification_token_secret SECRET async def on_after_register(self, user: User, request: Optional[Request] None): print(fUser {user.id} has registered.) async def on_after_forgot_password( self, user: User, token: str, request: Optional[Request] None ): print(fUser {user.id} has forgot their password. Reset token: {token}) async def on_after_request_verify( self, user: User, token: str, request: Optional[Request] None ): print(fVerification requested for user {user.id}. Verification token: {token}) async def get_user_manager(user_db: SQLAlchemyUserDatabase Depends(get_user_db)): yield UserManager(user_db) bearer_transport BearerTransport(tokenUrlauth/jwt/login) def get_jwt_strategy() - JWTStrategy[models.UP, models.ID]: return JWTStrategy(secretSECRET, lifetime_seconds3600) auth_backend AuthenticationBackend( namejwt, transportbearer_transport, get_strategyget_jwt_strategy, ) fastapi_users FastAPIUsersUser, uuid.UUID current_active_user fastapi_users.current_user(activeTrue)这是示例的核心文件逐层解读① 用户管理器UserManager继承UUIDIDMixin与BaseUserManager[User, uuid.UUID]。UUIDIDMixin提供parse_id等 UUID 主键解析逻辑reset_password_token_secret/verification_token_secret用于签名找回密码令牌与邮箱验证令牌on_after_register、on_after_forgot_password、on_after_request_verify是注册后、忘记密码后、请求验证后的回调钩子示例中仅打印日志实际项目中可替换为发送邮件、短信等业务逻辑完整钩子清单见 docs/configuration/user-manager.md。② 认证传输BearerTransportBearerTransport(tokenUrlauth/jwt/login)声明登录端点路径供 OpenAPI 文档生成 OAuth2 密码流方案查看源码 fastapi_users/authentication/transport/bearer.py 可知登录成功后返回JSONResponse其体为{access_token: token, token_type: bearer}由于 JWT 无法被吊销见源码 fastapi_users/authentication/strategy/jwt.py 中JWTStrategyDestroyNotSupportedError的说明“A JWT cant be invalidated: its valid until it expires.”Bearer 传输的登出不受支持get_logout_response会抛出TransportLogoutNotSupportedError。③ JWT 策略JWTStrategyJWTStrategy(secretSECRET, lifetime_seconds3600)从源码 fastapi_users/authentication/strategy/jwt.py 可以看到其完整构造参数参数示例默认值说明secretSECRET签名密钥必须替换为强口令lifetime_seconds3600Token 有效期秒示例为 1 小时token_audience[fastapi-users:auth]Token 的受众声明用于防伪造algorithmHS256签名算法public_keyNone若使用非对称算法如 RS256提供用于解码的公钥read_token流程为解码 JWT → 取sub声明中的用户 ID → 交给user_manager.parse_id解析 → 通过user_db.get(parsed_id)加载用户见 jwt.py。④ 认证后端与 FastAPIUsers 实例auth_backend AuthenticationBackend( namejwt, transportbearer_transport, get_strategyget_jwt_strategy, ) fastapi_users FastAPIUsersUser, uuid.UUID current_active_user fastapi_users.current_user(activeTrue)namejwt决定路由前缀挂载时用/auth/jwt与后端标识FastAPIUsers接受用户管理器依赖与后端列表可支持多后端并存如同时启用 JWT 与 Redis 会话current_user(activeTrue)生成一个依赖用于保护路由要求请求携带有效 Token 且用户处于激活状态。三、BeanieMongoDB版完整示例Beanie 版与 SQLAlchemy 版结构完全一致差异集中在数据库适配层1. 依赖清单requirements.txtfastapi fastapi-users[beanie] uvicorn[standard]Beanie 是 MongoDB 的 ODM因此不需要单独的异步数据库驱动包。2. 数据库层app/db.pyimport motor.motor_asyncio from beanie import Document from fastapi_users.db import BeanieBaseUser from fastapi_users_db_beanie import BeanieUserDatabase DATABASE_URL mongodb://localhost:27017 client motor.motor_asyncio.AsyncIOMotorClient( DATABASE_URL, uuidRepresentationstandard ) db client[database_name] class User(BeanieBaseUser, Document): pass async def get_user_db(): yield BeanieUserDatabase(User)使用motor异步驱动连接本机 MongoDBmongodb://localhost:27017数据库名database_nameBeanieBaseUser继承自 Beanie 的Document提供标准用户字段这里直接class User(BeanieBaseUser, Document): pass即可完成模型定义BeanieUserDatabase(User)将用户模型包装为 fastapi-users 可用的用户数据库接口。3. 生命周期初始化app/app.py 片段asynccontextmanager async def lifespan(app: FastAPI): await init_beanie( databasedb, document_models[ User, ], ) yieldBeanie 版在应用启动时通过init_beanie(databasedb, document_models[User])完成 ODM 初始化替代了 SQLAlchemy 版的create_db_and_tables()。4. 认证与用户管理app/users.pyclass UserManager(ObjectIDIDMixin, BaseUserManager[User, PydanticObjectId]): reset_password_token_secret SECRET verification_token_secret SECRET ...主键类型从uuid.UUID换成 Beanie 的PydanticObjectId因此UserManager继承ObjectIDIDMixinschemas.BaseUser[PydanticObjectId]同理BearerTransport、JWTStrategy、AuthenticationBackend的配置与 SQLAlchemy 版完全一致均为SECRETlifetime_seconds3600的 JWT 方案FastAPIUsersUser, PydanticObjectId只需更换泛型参数。两版示例说明认证层传输 策略 管理器与数据库层完全解耦切换数据库方案时只需替换db.py与模型主键类型业务路由代码零改动。四、路由速查示例暴露了哪些端点示例中挂载的路由对应关系如下完整请求/响应规范见 docs/usage/routes.md前缀路由说明/auth/jwtPOST /auth/jwt/login表单提交usernamepassword登录成功返回{access_token: ..., token_type: bearer}凭据错误返回400LOGIN_BAD_CREDENTIALS/authPOST /auth/register注册新用户成功返回201 Created与用户信息邮箱已存在返回400REGISTER_USER_ALREADY_EXISTS/authPOST /auth/forgot-password发起找回密码触发on_after_forgot_password回调/authPOST /auth/reset-password携带重置令牌设置新密码/authPOST /auth/request-verify-token/POST /auth/verify请求验证令牌 / 完成邮箱验证/usersGET/PATCH/DELETE /users/{id}、GET /users/me、PATCH /users/me用户信息读取与更新由get_users_router(UserRead, UserUpdate)生成启动应用后可直接访问 FastAPI 自带的交互式 API 文档/docs在线调试以上所有端点。五、下一步从示例到实战原文档在给出两个完整示例后明确引导读者进入 Usage 章节 深入了解路由细节。这里补充几条基于仓库源码的实战建议替换密钥将SECRET换成由secrets.token_hex(32)之类方式生成的高强度随机串并建议通过环境变量注入避免硬编码入库接入迁移工具SQLAlchemy 场景下引入 Alembic 管理表结构将create_db_and_tables()替换为正式迁移流程启用 Cookie 传输如果希望浏览器端免手动携带 Token可将BearerTransport换成 Cookie 传输见 docs/configuration/authentication/transports/cookie.mdCookie 传输支持登出实现业务钩子将on_after_*回调中的print替换为邮件发送、审计日志等真实业务逻辑OAuth 与多后端如需 GitHub/Google 登录可参考仓库中的 beanie-oauth 与 sqlalchemy-oauth 示例。至此你已经拥有一个功能完整的 JWT 用户认证系统——注册、登录、登出Cookie 场景、找回密码、邮箱验证、用户管理与受保护路由一应俱全。以此为起点再结合 docs/configuration 各分册认证策略、数据库适配、用户管理器、密码哈希等即可按需定制你自己的用户系统。赞分享后端认证鉴权Web框架【免费下载链接】fastapi-usersReady-to-use and customizable users management for FastAPI项目地址https://gitcode.com/gh_mirrors/fa/fastapi-users点击查看免费下载相关推荐FastAPI Users Cookie 传输方案基于 Cookie 的用户认证完整指南FastAPI Users Cookie 传输方案基于 Cookie 的用户认证完整指南 导读 本文深入讲解 FastAPI Users 框架中的 Cooki后端认证鉴权Web框架FastAPI Users 用户认证系统完整配置指南FastAPI Users 用户认证系统完整配置指南 FastAPI Users 是一个专为 FastAPI 框架设计的用户管理系统提供了开箱即用的用户注册、后端认证鉴权Web框架FastAPI-Users 用户认证流程完全指南FastAPI Users 用户认证流程完全指南 FastAPI Users 是一个为 FastAPI 框架提供用户认证功能的强大库。本文将详细介绍使用 Fas后端认证鉴权Web框架上一篇Navicat重置工具Mac用户的终极免费试用方案下一篇Navicat无限试用重置终极指南Mac用户必备的免费解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考