python - 由于 Flask-WTF 的 CSRF 保护,Flask-Restful POST 失败

标签 python rest flask flask-wtforms flask-restful

我正在使用普通的 flask web + flask-restful。所以我需要针对 Web 而不是 REST 的 CSRF 保护。

当我启用 flask-wtfCsrfProtect(app) 时,我对 flask-restful 的所有后期单元测试都返回 400。

有没有一种方法可以禁用 REST 服务的 CSRF 保护,因为它们来自没有 session 处理的移动手机,因此 CSRF 没有多大意义。

我是这样测试的:

rv = self.client.post('api/v1.0/verify-email', environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'Content-Type':'application/json'}, data=json.dumps(data))
self.check_content_type(rv.headers)
eq_(rv.status_code, 412)

最佳答案

您可以使用 @csrf.exempt decorator ,您需要使用 decorators argument 直接添加到 API 对象上;这会将装饰器应用于所有 API 路由:

csrf_protect = CsrfProtect(app)
api = restful.Api(app, decorators=[csrf_protect.exempt])

您不能使用 resource method decorators因为它们不是 exempt 装饰器工作所需的最终 View 函数。

看来您不能保护个人资源而免除其他资源;这是 Flask-Wtf 记录哪些 View 被豁免的方法所使用的方法的限制。

关于python - 由于 Flask-WTF 的 CSRF 保护,Flask-Restful POST 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509728/

相关文章:

javascript - Python Flask - 否 'Access-Control-Allow-Origin'

python - 在 Flask 中执行 app.run(debug=True) 行时出错

python - 转换 key :value pairs from bytestring to string?的最佳方法是什么

python - loc 获取不带 .index[0] 的索引

python - 有没有办法将两个列表与 xarray 数据变量中的相应信息连接起来?

javascript - 在 Express 应用程序中开发 REST API 时如何防止端点冲突

python Flask render_template html 未正确渲染

python - 如何在 kwargs 中使用 UUID 字段?

java - REST如何返回接口(interface)列表

java - 在没有 DispatcherServlet 的情况下配置 Spring REST Controller