Flask CORS: как я могу получить заголовок «Авторизация»? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть внешнее приложение на Vue.js и внутреннее приложение на Flask / Python.

Я пытаюсь отправить на сервер запрос с заголовком «Авторизация»Однако этот заголовок не поступает на мой сервер.

Я уже пытался сделать этот заголовок доступным в функции CORS, но безуспешно.

Кто-нибудь знает, как я могисправить это?

Я отправляю ниже кода переднего и заднего плана.

Заранее спасибо.

Код Vue.js

var authorization = ...

axios.post(process.env.VUE_APP_URL + 'ms3/sign_in', 
  {
    params: {
    }
  }, {
    headers: {
      'Access-Control-Allow-Origin': '*'
      'Authorization': authorization
    }
  }).then(response => {
    localStorage.setItem('ms3_user_token', response.headers.authorization)
  }).catch(error => {
    self.errorSignIn = error
    self.erroredSignIn = true
  }).finally(() => {
    self.loading = false
  })

Код колбы:

from flask import Flask
from flask_cors import CORS

...

app = Flask(__name__)
CORS(app, origins='*', 
     headers=['Content-Type', 'Authorization'], 
     expose_headers='Authorization')

...

@app.route("/ms3/sign_in", methods = ["POST", "OPTIONS"])
def ms3_sign_in(): 
    # the header does not exist
    auth_header = request.headers.get("Authorization")

    if auth_header is None or not auth_header.startswith('Basic '):
        return jsonify({ "message": "Invalid 'Authorization' header" }), 401

    username, password = ...

    encoded_jwt_token = auth_login(username, password)

    resp = Response("Returned Token")
    resp.headers['Authorization'] = encoded_jwt_token

    return resp

1 Ответ

0 голосов
/ 05 апреля 2019

Я благодарю Аллана из группы Python Brasil, который помог мне.

Необходимо было добавить «Content-Type»: «application / json» в мой запрос к приложению Vue.js.

Я отправляю ниже обновленный код для будущей помощи:

Код Vue.js

var authorization = ...

axios.post(process.env.VUE_APP_URL + 'ms3/sign_in', 
  {
    params: {
    }
  }, {
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',  // <-- here
      'Authorization': authorization
    }
  }).then(response => {
    localStorage.setItem('ms3_user_token', response.headers.authorization)
  }).catch(error => {
    self.errorSignIn = error
    self.erroredSignIn = true
  }).finally(() => {
    self.loading = false
  })
...