Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过POST请求解决烧瓶中的CORS问题?_Javascript_Python_Json_Flask_Cors - Fatal编程技术网

Javascript 如何通过POST请求解决烧瓶中的CORS问题?

Javascript 如何通过POST请求解决烧瓶中的CORS问题?,javascript,python,json,flask,cors,Javascript,Python,Json,Flask,Cors,我有以下js函数提供登录: function login(){ const user = { username: document.getElementById("username_id").value, password: document.getElementById("pass_id").value }; var xhr = new XMLHttpRequest(); xhr.with

我有以下js函数提供登录:

function login(){

    const user = {
        username: document.getElementById("username_id").value,
        password: document.getElementById("pass_id").value
    };
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
    xhr.crossorigin = true;
    
    xhr.addEventListener("readystatechange", function() {
    if(this.readyState === 4) {
        console.log(user);
        console.log(this.responseText);
        localStorage.setItem("user", JSON.parse(xhr.responseText).access_token)
    }
    });
    
    xhr.open("POST", "http://127.0.0.1:5000/login");
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.setRequestHeader("Access-Control-Allow-Credentials", "true");


    let data = JSON.stringify(user);
    xhr.send(data);
}
在烧瓶中按以下路线操作:

@api_blueprint.route("/login", methods=["POST"])
@cross_origin(support_credentials=True)
def login():
    from app import bcrypt
    data = LoginData().load(request.json)
    if data:
        user = dbu.get_entry_by_username(user_table, username=data["username"])
        hpw = bcrypt.generate_password_hash(data["password"])
        if not user:
            return jsonify({"message": "Couldn't find user!"})
        if bcrypt.check_password_hash(hpw, data["password"]):
            access_token = create_access_token(identity=data["username"], expires_delta=datetime.timedelta(days=365))
            return jsonify(access_token=access_token, id=user.id), 200
此外,我在我的flask应用程序中启用了CORS:

from flask_cors import CORS
CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
app.config['CORS_SUPPORTS_CREDENTIALS'] = True
问题是,当我尝试使用js登录时,控制台中出现了一个错误,即响应中“Access Control Allow Credentials”(访问控制允许凭据)头的值为“”,当请求的凭据模式为“include”(包括)时,该值必须为“true”。我不知道在其他地方可以将这些凭据设置为true。 我的应用程序中还有两个GET请求,它们运行时没有任何问题。
如何修复它?

服务器必须设置
访问控制允许凭据
头,因此响应中的“…为”…”@Andreas yes,并且我的路由中有
支持\u凭据=True
。flask cors文档:支持_凭证(bool)–允许用户发出经过身份验证的请求。如果为true,则在响应中注入访问控制允许凭据标头。这允许跨域提交cookie和凭据。