我正在使用普通的 flask web + flask-restful。所以我需要针对 Web 而不是 REST 的 CSRF 保护。
当我启用 flask-wtf
的 CsrfProtect(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/