Python 3.x FastAPI掩蔽场
我将遵循有关网络安全性的教程 以具有以下端点结束:Python 3.x FastAPI掩蔽场,python-3.x,openapi,fastapi,Python 3.x,Openapi,Fastapi,我将遵循有关网络安全性的教程 以具有以下端点结束: @app.post(“/token”,response\u model=token) 异步def登录(表单\数据:OAuth2PasswordRequestForm=Dependes()): user=authenticate\u user(假用户\u db,form\u data.username,form\u data.password) 如果不是用户: 引发HTTPException( status\u code=status.HTTP\
@app.post(“/token”,response\u model=token)
异步def登录(表单\数据:OAuth2PasswordRequestForm=Dependes()):
user=authenticate\u user(假用户\u db,form\u data.username,form\u data.password)
如果不是用户:
引发HTTPException(
status\u code=status.HTTP\u 401\u未经授权,
detail=“用户名或密码不正确”,
headers={“WWW-Authenticate”:“Bearer”},
)
访问令牌过期=时间增量(分钟=访问令牌过期分钟)
访问令牌=创建访问令牌(
data={“sub”:user.username},expires\u delta=access\u token\u expires
)
返回{“访问令牌”:访问令牌,“令牌类型”:“承载者”}
导致了以下狂妄自大:
我的问题:
有没有一种简单的方法来屏蔽密码字段?所以我没有在纯文本中看到它?
就像我们可以使用授权按钮一样。您可以使用Pydantic的
SecretStr
。它只是将{“format”:“password”}
添加到OpenAPI模式中
从fastapi导入fastapi,具体取决于
来自pydantic import BaseModel,SecretStr
类用户(基本模型):
用户名:str
密码:SecretStr
app=FastAPI()
@app.post(“/用户”)
异步def create_user(user:user=Depends()):
打印(user.password.get\u secret\u value())
您将拥有此功能,有关更多信息,请参阅
根据@Yagiz answer的说法,这是有效的:
类CustomOAuth2PasswordRequestForm(OAuth2PasswordRequestForm):
定义初始化__(
自己
授权类型:str=Form(…,regex=“password”),
用户名:str=Form(…),
密码:SecretStr=Form(…),
范围:str=Form(“”),
客户id:可选[str]=表格(无),
客户机密:可选[str]=表格(无),
):
超级()。\uuu初始化__(
授予类型=授予类型,
用户名=用户名,
密码=密码,
范围=范围,
客户号=客户号,
客户机密=客户机密,
)
谢谢您的回答,但是端点取决于OAuth2PasswordRequestForm,所以我需要超级种子类吗?和带有密码的super init方法:SecretStr=Form(…)?是的,这应该也很好,您可以单击右上角的“Authorize”按钮,而不是直接使用/login路由,这将屏蔽密码表单输入。