FastAPI的自定义身份验证

时间:2020-09-30 22:26:36

标签: python fastapi

如何为fastapi创建自定义身份验证?

示例: 我想使用标头{'password':'best password'}发出请求,并且如果标头中的密码键是“ best password”,则允许在不更改所有视图的情况下可见“仅认证”内容(并与通用文档兼容)

1 个答案:

答案 0 :(得分:4)

如果您不希望与swagger前端进行精美的集成,则只需创建一个用于验证令牌的依赖项即可。

    from fastapi import FastAPI, HTTPException, Depends, Request

    def verify_token(req: Request):
        token = req.headers["Authorization"]
        # Here your code for verifying the token or whatever you use
        if token is not valid:
            raise HTTPException(
                status_code=401,
                detail="Unauthorized"
            )
        return True
    
    @app.post("/auth")
    async def login(password: str):
        if password == "my_password":
            return {"token": password} # Generate your own token
    
    @app.get("/")
    async def home(authorized: bool = Depends(verify_token)):
         if authorized:
            return {"detail": "Welcome home"}

我没有测试代码,但足以让您了解其工作方式。

如果您希望将所有内容都与swagger UI很好地集成在一起,请告诉我。由于准备它的时间很长而且很耗时,所以如果没有必要,我不会准备它。另外,您还必须遵循swagger的实现,据我从您的问题中可以理解,它并不完全符合您的要求。