我有一个 FastAPI 项目,它使用 fastapi_another_jwt_auth
作为对用户进行身份验证的方式。我打算在除了少数白名单端点之外的大多数端点中实现它,但我发现很难对需要身份验证的端点进行单元测试,因此我正在考虑使用简单的 if- 在中间件中实现它else
检查白名单端点。这样,我只需要禁用中间件来运行单元测试,身份验证测试就变得微不足道,因为我们只是针对白名单进行测试。
fastapi_another_jwt_auth
的 API 似乎是围绕 FastAPI 依赖注入(inject)的概念设计的。有没有办法在中间件中使用相同的库?
最佳答案
我查看了 fastapi_another_jwt_auth
的代码。显然,注入(inject)时,框架运行 AuthJWT 构造函数,该构造函数接收 Request
和 Response
对象。如下所示。
class AuthJWT(AuthConfig):
def __init__(self,req: Request = None, res: Response = None):
...
一旦成功初始化,我们就可以使用.jwt_required()
方法。
所以在中间件中实现的方式是:
@app.middleware("http")
async def middleware_callback(req, call_next):
if not whitelisted: # this is pseudocode
auth = AuthJWT(req)
auth.jwt_required() # throws error when user is not authenticated
# rest of the logic
...
这样,我就可以在中间件级别管理所有身份验证,并且不必将 AuthJWT
对象注入(inject)到我的 View 函数中。
关于python-3.x - 如何在中间件中使用 `fastapi_another_jwt_auth` 而不是通过 FastAPI 中的依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73903098/