在我的Flask中间件中获取标题时出现问题

在我的Flask中间件中获取标题时出现问题,flask,header,authorization,middleware,Flask,Header,Authorization,Middleware,我正在开发一个FlaskAPI,并试图实现基本的身份验证。为此,我使用一个中间件来检查“Authorization”头的内容。当我通过填充身份验证字段来执行请求时,它是有效的,但是当我试图从JavaScript代码中获取头时,它就不再有效了 我尝试了几种发送和检索标题的方法,但没有找到任何有效的方法 以下是我的中间件的Python代码: class middleware(): def __init__(self, app): self.app = app de

我正在开发一个FlaskAPI,并试图实现基本的身份验证。为此,我使用一个中间件来检查“Authorization”头的内容。当我通过填充身份验证字段来执行请求时,它是有效的,但是当我试图从JavaScript代码中获取头时,它就不再有效了

我尝试了几种发送和检索标题的方法,但没有找到任何有效的方法

以下是我的中间件的Python代码:

class middleware():

    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        request = Request(environ)

        path = environ.get('PATH_INFO')

        if request.authorization == None or request.authorization['username'] == "" or request.authorization['password'] == "":
            res = Response(u"Missing informations", mimetype='text/plain', status=401)
            return res(environ, start_response)

        userName = request.authorization['username']
        password = request.authorization['password']

        users = db_session.execute(select(Player)).scalars()

        for user in users:
            if (userName == user.pseudo) and check_password_hash(db_session.execute(select(Player.password_hash).where(Player.pseudo==userName)).scalar(), password):
                environ['user_pseudo'] = user.pseudo
                environ['user_id'] = user.id
                environ['auth'] = True
                return self.app(environ, start_response)

        res = Response(u'Authorization failed', mimetype='text/plain', status=401)
        return res(environ, start_response)
这是我的JS代码:

function login() {
  var url = "http://localhost:5000/test_login";

  username = document.getElementById("username_l").value;
  password = document.getElementById("password_l").value;

  unencoded_token = username + ":" + password;
  token = btoa(unencoded_token);
  auth = 'Basic ' + token;

  $.ajaxSetup({
    headers: {"Authorization": auth }
  });

  $.ajax({
      type: "GET",
      url: url,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
    })
  .done(function(data) {
    CallbackLogin(data)
  })
  .fail(function(error) {
    CallbackError(error);
  });
}
有了这段代码,我得到了一个401错误,因为在中间件中似乎找不到“Authorization”头。有人知道我错过了什么吗

我忘了提到我的浏览器中有一个CORS错误,自从我安装中间件以来,我每次尝试提出请求都会遇到这个错误

提前感谢您的回答

已解决:

你好,我终于解决了我的问题

原因是:当通过我的浏览器(Firefox)发出请求时,创建了第一个选项请求,但没有由我的中间件处理,因为此请求中没有“授权”头,或者至少没有按照我的旧脚本所期望的方式

为了解决这个问题,我必须创建自己的行来处理请求的标题:

headers = dict(request.headers)
infos = str(headers.get("Authorization")).split(" ")
我可以使用这些行来检索标题“Authorization”的数据,我的中间件也可以使用这些行