使用 fastapi,我正在努力添加“login_required”(或 smh)中间件。
(我认为中间件是最好的主意,如果我的问题没有得到正常的解决方案,我将不得不使用装饰器,或者一些硬编码,比如在每个路由中放入 hassatr(request.state, "user") )
当然,我想为未经授权的人保留一些免费页面,
所以我的想法是检查请求的路径是否在 AUTH_PATHS 列表中。
这一直有效,直到我明白我总是有一些灵活的路径,例如
@router.get('/posts/all/{page:int}')
如果你知道如何在真正的产品项目上完成它,我会把它作为答案
我有4个想法:
搜索一些我不知道的神奇 python/fastapi 语法(还没有找到,但也许是)
使用一些python模块,比如fastapi内置的pydantic(它是为了验证而制作的,所以它不起作用)
做一些疯狂的事情,比如每当我的数据库变得更大并且需要更多页面来显示所有帖子时,它就会为 config.py 中的某个值加 1,并更新 config.py 中的设置类,包括那里的每个路径(例如' /posts/all/154', '/posts/all/155') 等(这纯粹是疯狂,我相信这会非常低效且缓慢)
检查请求调用了哪个端点(函数)。将此视为最好的主意(当我已经空了的时候),但后来我找不到任何信息,如果这是真的的话。
因此,我所做的解决方案是,我制作了 2 个独立的路由器,其中一个正在应用依赖项来进行所需的身份验证。令牌 I 的验证毕竟留在中间件上,因此它使当前用户可以在两个路由器中访问。效果很好。