Flask Response标头不包含CORS

时间:2018-09-21 03:33:16

标签: flask cors http-headers fetch-api

我正在编写Flask API,并将CORS用于我的一张蓝图。但是,“ Access-Control-Allow-Origin”标头似乎未附加到响应中。我的蓝图看起来像:

import json
from flask import (
    Blueprint, flash, g, request, session, jsonify, current_app, Response
)

...

@bp.route('/login', methods=('POST',))
def login():

    ...

    if error is None:
        session.clear()
        session.permanent = True
        session['userID'] = user['id']

        res['actionSuccess']= True
    else:
        res['actionSuccess'] = False
        res['error'] = error

    resp = jsonify(res)
    resp.status_code = 200
    resp.headers['Access-Control-Allow-Origin'] = "*"
    resp.headers['Access-Control-Allow-Credentials'] = True
    return resp

为回应,我也尝试过:

js = json.dumps(res)
resp = Response(js, status=200, mimetype='application/json')'''
resp.headers['Access-Control-Allow-Origin'] = "*"
resp.headers['Access-Control-Allow-Credentials'] = True

我的前端客户端使用Fetch API发出请求,如下所示:

fetch(url, {
                method: 'POST',
                mode: 'cors',
                body: JSON.stringify(loginObj),
                credentials: 'include',
                headers: {
                    'Content-Type': 'application/json',
                }
            })
            .then(res => res.json())
            .then(data => {
                console.log(data);
            })

但是,每当我调用“ / login”路由时,都会出现以下错误:

  

无法加载http://localhost:5000/auth/login:对预检的响应   请求未通过访问控制检查:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。因此,不允许原点“ http://localhost:8080”   访问。如果不透明的响应满足您的需求,请设置请求的   模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

我的回复中显然包含了CORS标头,但我不知道为什么它不起作用。任何帮助将不胜感激。

0 个答案:

没有答案