RESTFUL API 访问和刷新令牌

参考: https://codevoweb.com/restful-api-with-python-fastapi-access-and-refresh-tokens/

虚拟环境

mkdir app
cd app
python3 -m venv venv

初始化 FastAPI 服务

pip install fastapi[all]


# app/main.py
from fastapi import FastAPI

app = FastAPI()


@app.get('/api/healthchecker')
def root():
    return {'message': 'Hello World'}


# 启动
uvicorn app.main:app --host localhost --port 8000 --reload

设置环境变量

  • .env

  • app/config.py

连接Mysql数据库

pip install sqlalchemy mysql-connector-python pydantic[email]

  • app/database.py

创建数据库模型

  • app/models.py

Pydantic验证请求和响应

  • app/schemas.py

密码管理

pip install passlib bcrypt

  • app/utils.py

JWT 身份验证扩展

pip install fastapi-jwt-auth[asymmetric]

  • app/oauth2.py

创建身份验证控制器

  • app/routers/auth.py

用户注册控制器

  • app/routers/auth.py

用户登录控制器

  • app/routers/auth.py

刷新访问令牌控制器

  • app/routers/auth.py

注销用户控制器

  • app/routers/auth.py

Auth 控制器的完整代码

  • app/routers/auth.py

如何添加受保护的路由

  • app/oauth2.py 更新

创建用户控制器

  • app/routers/user.py

将路由添加到主文件

  • app/main.py

使用 Alembic 进行数据库迁移

Alembic是一个轻量级的数据库迁移工具,旨在与 SQLAlchemy 一起使用。它可以自动拉取 SQLAlchemy 模型并生成相应的表。

  • init – 准备项目以使用 alembic

  • upgrade – 将数据库升级到更高版本

  • downgrade - 恢复到以前的版本

  • revision – 创建一个新的修订文件

测试 API 接口

  • 如果是API方式,每次请求需要带上 Cookie, 如果刷新了Cookie, 原来的 Cookie 还是可以继续使用..(这点不安全)

Last updated