如何使用CORS和授权标头正确设置Flask

时间:2018-02-24 08:40:12

标签: flask cors fetch

我想在我的烧瓶应用程序中设置CORS并添加烧瓶 - 助手达到某一点。而" CORS(app)"帮助了所有不需要授权的路线,我无法访问那些不需要授权的路线。

有问题的一条路线是这样的。

@users_blueprint.route('/users/<user_id>', methods=['GET'])
@authenticate
def get_single_user(resp, user_id):
response_object = {
    'status': 'failure',
    'message': 'Invalid Payload'
}

if resp != user_id:
    response_object['message'] = 'You are not authorized to view this user'
    return jsonify(response_object), 400

try:
    user = User.query.filter_by(user_id=user_id).first()
    if user:
        response_object['status'] = 'success'
        response_object['data'] = user.to_json()
        return jsonify(response_object), 200
    else:
        response_object['message'] = 'The user does not exist'
        return jsonify(response_object), 400
except (exc.IntegrityError, ValueError, TypeError) as e:
    db.session().rollback()
    return jsonify(response_object), 400

我玩过CORS设置,到目前为止得到了这个:

#enable CORS
CORS(app, allow_headers=["Content-Type", "Authorization", \
        "Access-Control-Allow-Credentials"], supports_credentials=True)

但是当我尝试通过fetch从我的React应用程序中访问有问题的路径时,我收到此错误:

  

无法加载   MYROUTE:没有   &#39;访问控制允许来源&#39;标题出现在请求的上   资源。起源&#39; http://localhost:3000&#39;因此是不允许的   访问。响应具有HTTP状态代码502.如果是不透明的响应   满足您的需求,将请求模式设置为“无人”状态。去取   CORS禁用的资源。

我还能做什么?

修改

当我通过CURL发送OPTIONS请求时,我可以看到我的相关路线将以&#34; access-control-allow&#34; -headers响应。所以我对发生的事情一无所知。这也是我的获取请求:

const url = `myurlendpoint/myuserid`
const token = my_id_token
const options = {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  }
};
fetch(url, options)
  .then(response => console.log(response.json()))
  .catch(error => console.log(error))

另外:当我在没有标题的情况下拨打我的路线&#39;授权&#39;现在我得到了正确的回答说&#34;没有提供身份验证&#34;而不是跨源问题。如果这条路线确实没有交叉原点 - 允许设置那么它应该在我的请求中声明没有授权,对吧?所以它与Authorization标题有关...

0 个答案:

没有答案