Flask: flask_wtf CSRFProtect выдает неверный запрос Отсутствует токен сеанса CSRF - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь настроить защиту 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

Я также устанавливаю app.config["SECRET_KEY"] и app.config["WTF_CSRF_SECRET_KEY"] в функции create_app.

Все мои формы имеют <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />.

Я читал в других публикациях об использовании Flask.Form, но я не делаю этого, а просто извлекаю данные POST из запроса request.form.

На POST я получаю следующее сообщение об ошибке:

Bad Request

The CSRF session token is missing.

Локально все работает нормально, но когда я запускаю свой код из моего gunicorn, в среде nginx он не работает. Есть идеи? Нужно ли устанавливать атрибут SERVER_NAME?

EDIT:

По запросу CSRF_TOKEN фактически отправляется после проверки заголовков.

Хм, форма csrf_token в источнике, похоже, отличается от токена, отправленного с POST

EDIT:

Я добавил переменные конфигурации для flask_wtf в мою функцию create_app, и она все еще не работает:

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?

...