📌  相关文章
📜  FastAPI 用户创建超级用户的助手 - Python (1)

📅  最后修改于: 2023-12-03 15:15:02.632000             🧑  作者: Mango

FastAPI 用户创建超级用户的助手 - Python

本篇文章将为您介绍一款使用 FastAPI 快速创建超级用户的辅助工具。通过本工具,您可以用最短的时间和最简洁的代码,创建具有超级管理员权限的用户账号。

什么是 FastAPI ?

FastAPI 是一款现代化的 Python Web 框架,它基于 Python 3.7+ 版本开发,使用异步请求处理方式,可以大大提高 Web 应用的性能。FastAPI 简单易用,且具有强大的自动文档化功能,让您轻松实现 Web 开发。

为什么需要创建超级用户?

在构建 Web 应用程序时,超级用户是一个至关重要的角色。超级用户具有最高级别的权限,可以访问所有资源、编辑用户信息、修改公共配置等。因此,超级用户的安全性和保护非常重要。

如何使用 FastAPI 创建超级用户?

本工具基于 FastAPI 框架开发,使用了 pydantic 和 SQLAlchemy 库。标准库 random 和 string 也被使用到。

import random
import string
from typing import Optional
from fastapi import FastAPI
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from passlib.context import CryptContext
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建一个路由器
app = FastAPI()

# 创建一个HTTP基础安全认证实例
security = HTTPBasic()

# 密码的哈希值加密
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

# SQL数据库配置
SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"

# 创建数据库实例
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})

# 创建一个模型对象基类
Base = declarative_base()

# 定义用户模型
class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String(50))
    hashed_password = Column(String(255))

# 创建所有数据表
Base.metadata.create_all(bind=engine)

# 创建会话
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
session = Session()

# 创建一个随机字符串生成器
def random_string(length: int) -> str:
    letters = string.ascii_lowercase
    random_str = ''.join(random.choice(letters) for i in range(length))
    return random_str

# 创建超级用户的API路由
@app.post("/superuser")
async def create_superuser(creds: HTTPBasicCredentials, password: str):
    # 检查用户是否已认证成功
    if not verify_password(creds.username, creds.password):
        return {"msg": "认证失败,请重新认证。"}

    # 创建随机用户名和加密密码
    username = random_string(10)
    hashed_password = get_password_hash(password)

    # 添加超级用户到数据库
    user = User(username=username, hashed_password=hashed_password)
    session.add(user)
    session.commit()

    # 返回创建的超级用户信息
    return {"username": username, "password": password}

# 创建密码哈希值
def get_password_hash(password: str) -> str:
    return pwd_context.hash(password)

# 验证用户密码
def verify_password(username: str, password: str):
    user = session.query(User).filter(User.username == username).first()
    if not user:
        return False
    if not pwd_context.verify(password, user.hashed_password):
        return False
    return True
如何测试 FastAPI 超级用户工具?

运行上述代码后,您需要使用用户名和密码进行身份验证,才能创建超级用户:

$ curl -X POST "http://localhost:8000/superuser" \
    -H  "accept: application/json" \
    -u "{username}:{password}" \
    -d "{\"password\":\"123456\"}"

上述命令将在 FastAPI 应用程序中创建一个新的超级用户,然后返回包含用户名和密码的 JSON 数据。

结语

通过本文介绍,您已经学会了如何在 FastAPI 应用程序中创建超级用户。自动化创建超级用户可以让您快速构建具有最大特权的账户,从而保障 Web 应用程序的安全性。希望您可以将本工具用于您的实际开发中,提高开发效率和代码质量。