使用 Request Loader 定制登录

有时你想要不使用 cookies 情况下登录用户,比如使用 HTTP 头或者一个作为查询参数的 api 密钥。这种情况下,你应该使用 request_loader 回调。这个回调和 user_loader 回调作用一样,但是 user_loader 回调只接受 Flask 请求而不是一个 user_id。

例如,为了同时支持一个 url 参数和使用 Authorization 头的基本用户认证的登录:

1. @login_manager.request_loader
2. def load_user_from_request(request):

4. # first, try to login using the api_key url arg
5. api_key = request.args.get('api_key')
6. if api_key:
7. user = User.query.filter_by(api_key=api_key).first()
8. if user:
9. return user

11. # next, try to login using Basic Auth
12. api_key = request.headers.get('Authorization')
13. if api_key:
14. api_key = api_key.replace('Basic ', '', 1)
15. try:
16. api_key = base64.b64decode(api_key)
17. except TypeError:
18. pass
19. user = User.query.filter_by(api_key=api_key).first()
20. if user:
21. return user

23. # finally, return None if both methods did not login the user
24. return None