Flask和csrf代币

2024-10-01 17:39:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我从python-flaskangular开始,并使用this snippet来处理csrf。对于ajax调用,它总是给我403错误。我不明白我做错了什么。 我看了很多答案,并尝试了google search中找到的所有选项。但运气不好。我不会犯错误的。在

烧瓶代码:

@app.route('/targetapi/', methods=['POST'])
def fetch_targets():
  """ """
  data_dict = {}
  acc_ids = request.args['acc_ids']
  data_dict['username'] = session.get('username')
  data_dict['targets'] = some_func(acc_ids)
  return jsonify(data_dict)

角度代码: HTML页面:

^{pr2}$

Ajax调用:

$http({
         method : "POST",
         url : '/targetapi/',
         headers : { xsrfHeaderName: 'X-CSRFToken',  xsrfCookieName :  csrf_token },
         data : {  acc_ids : accountIDs  }                  
})

不知道为什么我收到了403条禁止回复:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>403 Forbidden</title>
<h1>Forbidden</h1>
<p>You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.</p>

*从Chrome开发工具粘贴的响应


Tags: the代码idsdatatitlehtmlusernameh1
1条回答
网友
1楼 · 发布于 2024-10-01 17:39:23

检查Chrome是否在Post请求之前发送Options请求。如果是这样的话,你可以试试:

from flask import current_app

    @app.route('/targetapi/', methods=['POST', 'OPTIONS'])
    def fetch_targets():
        if request.method=='OPTIONS':
            response = current_app.make_default_options_response()
        else:
          data_dict = {}
          acc_ids = request.args['acc_ids']
          data_dict['username'] = session.get('username')
          data_dict['targets'] = some_func(acc_ids)
          return jsonify(data_dict)

相关问题 更多 >

    热门问题