使用 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):
  3. # first, try to login using the api_key url arg
  4. api_key = request.args.get('api_key')
  5. if api_key:
  6. user = User.query.filter_by(api_key=api_key).first()
  7. if user:
  8. return user
  9. # next, try to login using Basic Auth
  10. api_key = request.headers.get('Authorization')
  11. if api_key:
  12. api_key = api_key.replace('Basic ', '', 1)
  13. try:
  14. api_key = base64.b64decode(api_key)
  15. except TypeError:
  16. pass
  17. user = User.query.filter_by(api_key=api_key).first()
  18. if user:
  19. return user
  20. # finally, return None if both methods did not login the user
  21. return None