0

现在我正在尝试使用 nginx + unicorn + flask 开发服务器。

如果我只执行 python,csrf_tokens 工作没有任何问题。

但是,如果我使用 nginx + unicorn + flask 执行 python,则会发生错误。

400 BAD 请求 - CSRF 会话令牌丢失。或 CSRF 令牌不匹配。

我应该为 nginx 进行会话的其他设置吗?

还是我错过了什么?

应用程序/初始化.py

from flask_wtf.csrf import CsrfProtect

csrf = CsrfProtect()

def create_app(config_name):
   app = Flask(__name__, instance_path='/instance')
   app.config.from_object(config[config_name])
   config[config_name].init_app(app)

   bootstrap.init_app(app)
   moment.init_app(app)
   csrf.init_app(app)
   app.config.update(CSRF_ENABLED = app.config['CSRF_ENABLED'])

   //CSRF_ENABLED = True

   return app

登录.html

<form action="{{url_for('.login')}}" class="form-signin text-center" method="POST">
    {{ form.csrf_token }}
</form>
4

1 回答 1

0

我经常在我的项目中使用flask + gunicorn + nginx的组合。对于我的表格,我使用了不同的方法:

表格.py

from wtforms import StringField, SubmitField, IntegerField
from wtforms.validators import DataRequired, Optional

class IdentityForm(FlaskForm):
    age = IntegerField("Type your age", validators=[Optional()])
    name = StringField("Type your name*", validators=[DataRequired()])
    submit = SubmitField("Submit")

page.html

 <form action="" method="post" novalidate>
     {{ form.hidden_tag() }}

     {{ form.age.label }}<br>
     {{ form.age() }}

     {{ form.name.label }}<br>
     {{ form.name() }}

    {{ form.submit() }}
</form>

在这个小例子中,我们关心的部分是form.hidden_tag()HTML 方面的参数。此参数生成一个隐藏字段,其中包含一个用于保护表单免受 CSRF 攻击的令牌。为此,有必要SECRET_KEY在烧瓶配置中定义变量:

SECRET_KEY = os.environ.get('SECRET_KEY') or 'do-not-get-tired-youll-never-find'

SECRET_KEY是一种加密密钥,可以生成签名或令牌。FLASK_WTF使用它来保护表单免受 CSRF 攻击。

就这样。FLASK_WTF为您处理剩下的事情

要了解更多信息,请查看

于 2019-10-02T13:15:41.117 回答