Кросс-исходный запрос заблокирован с помощью Flask при использовании BasicAuth - PullRequest
0 голосов
/ 07 января 2019

У меня есть приложение Flask, содержащее различные изображения, отображающие некоторые кластеры, построенные по алгоритму K-Means. Пользователь должен иметь возможность выбрать одно или несколько изображений, после чего он будет перенаправлен на веб-страницу, где кластеры могут быть дополнительно оценены. Приложение работало как задумано, пока я не добавил базовую аутентификацию доступа.

В частности, мой (упрощенный) скрипт на python выглядит следующим образом:

from flask import Flask, render_template, request, redirect, url_for 
from flask_cors import CORS
from flask_basicauth import BasicAuth

app=Flask(__name__)

app.config['BASIC_AUTH_USERNAME'] = os.environ['AUTH_USERNAME']
app.config['BASIC_AUTH_PASSWORD'] = os.environ['AUTH_PASSWORD']
app.config['BASIC_AUTH_FORCE']= True
basic_auth=BasicAuth(app)

CORS(app)


@app.route('/')
def show_index():
    images=os.listdir(app.root_path+"/static/img/")
    return render_template("cluster_images.html", cluster_images = images)

@app.route("/filter", methods=["POST", "GET"])
def filter():
if request.method=="POST":
    sel=request.get_json()

#Do some operations with sel

Проблема возникает, когда я пытаюсь перенаправить на маршрут / filter от основного маршрута, который выполняется "btn1". Ниже показана функция из cluster_images.html, которая обрабатывает http-запрос при запуске btn1

.
$("document").ready(function() {
    $("#btn1").click(function(){
$.ajax({
    type: 'POST',
    beforeSend: function(){
        $('.loader')},
        contentType: 'application/json',
        url:  "http://localhost:5000/filter",
        dataType : 'html',
        data : JSON.stringify(images), success: function(){window.location.href = "http://localhost:5000/filter"}
})
})
})

Когда я нажимаю кнопку, я получаю следующую ошибку:

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса по адресу http://localhost:5000/filter. (причина: предварительный канал CORS не выполнен). [Узнать больше]

...