我正在尝试在Web应用程序上配置CSRF保护,但似乎无法弄清FLASK_WTF CSRFProtect
我正在使用来初始化我的应用
from flask import (Flask, g, jsonify, redirect, render_template, request,
url_for)
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
def create_app():
...
...
csrf.init_app(app)
app.app_context().push()
return app
我还在create_app函数中设置app.config["SECRET_KEY"]
和app.config["WTF_CSRF_SECRET_KEY"]
。
我所有的表单都有<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
。
我读过其他有关使用Flask.Form的文章,但我没有这样做,只是从request.form字典中获取POST数据。
在POST上,我收到以下错误消息:
Bad Request
The CSRF session token is missing.
在本地,一切正常,但是当我从gunicorn,nginx环境运行代码时,它将失败。有任何想法吗?我需要设置SERVER_NAME属性吗?
编辑:
根据请求,在检查标题后实际上发送了CSRF_TOKEN。
嗯,源代码中的csrf_token形式似乎与POST发送的令牌不同
编辑:
我在create_app函数中添加了flask_wtf的配置变量,但仍无法正常工作:
app.config["WTF_CSRF_SECRET_KEY"] = "same_as_secret_key"
app.config["WTF_CSRF_FIELD_NAME"] = "csrf_token"
app.config['WTF_CSRF_ENABLED'] = True
app.config["WTF_CSRF_TIME_LIMIT"] = None # valid throughout life of session
if debug:
app.config["SESSION_COOKIE_SECURE"] = False
else:
app.config["SESSION_COOKIE_SECURE"] = True
app.config["REMEMBER_COOKIE_SECURE"] = True
这与我的nginx配置有关吗?