📅  最后修改于: 2023-12-03 15:15:02.632000             🧑  作者: Mango
本篇文章将为您介绍一款使用 FastAPI 快速创建超级用户的辅助工具。通过本工具,您可以用最短的时间和最简洁的代码,创建具有超级管理员权限的用户账号。
FastAPI 是一款现代化的 Python Web 框架,它基于 Python 3.7+ 版本开发,使用异步请求处理方式,可以大大提高 Web 应用的性能。FastAPI 简单易用,且具有强大的自动文档化功能,让您轻松实现 Web 开发。
在构建 Web 应用程序时,超级用户是一个至关重要的角色。超级用户具有最高级别的权限,可以访问所有资源、编辑用户信息、修改公共配置等。因此,超级用户的安全性和保护非常重要。
本工具基于 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
运行上述代码后,您需要使用用户名和密码进行身份验证,才能创建超级用户:
$ curl -X POST "http://localhost:8000/superuser" \
-H "accept: application/json" \
-u "{username}:{password}" \
-d "{\"password\":\"123456\"}"
上述命令将在 FastAPI 应用程序中创建一个新的超级用户,然后返回包含用户名和密码的 JSON 数据。
通过本文介绍,您已经学会了如何在 FastAPI 应用程序中创建超级用户。自动化创建超级用户可以让您快速构建具有最大特权的账户,从而保障 Web 应用程序的安全性。希望您可以将本工具用于您的实际开发中,提高开发效率和代码质量。