我正在编写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标头,但我不知道为什么它不起作用。任何帮助将不胜感激。