Flask-WTF CSRF-Validierung schlägt fehl, wenn die App in die Docker-Produktionsumgebung verschoben wird

Ich habe gerade meine Produktionsumgebung für die von mir entwickelte Flask-App eingerichtet.

Dieser Stack ist:

Windows Server 2012 R2 
Hyper-V VM 
    - Running Ubuntu 14.04
Docker 1.5 
    - Running Containers: 
        mysql 5.6
        nginx 1.6.3
        uwsgi 2.0.10

So im Grunde habe ich eine statische IP in Ubuntu eingerichtet, Port 80 wird an den Nginx-Container weitergeleitet, ein Datenvolumen, das zwischen den Nginx- und Uwsgi-Containern für eine Socket-Datei geteilt wird, und schließlich eine Verknüpfung zwischen dem Mysql-Container und dem Uwsgi-Container für Datenbankkommunikation.

Ich verwende CSRF in der folgenden Implementierung in meiner lokalen Entwicklungsumgebung seit einiger Zeit ohne Probleme:

from flask_wtf import Form

class UserForm(Form):
    ...

Und dann in meiner Vorlage:

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

Wenn ich meine App jedoch unverändert in die oben angegebene Umgebung verschoben habe, erhalte ich Folgendes:

Ungültige Anforderun

CSRF-Token fehlt oder ist falsch.

in Antwort, wenn ich versuche, ein Formular einzureichen. Ich verwende die gleiche Datei "requirements.txt" mit "pip", um meine Flask-App einzurichten. Ich habe auch überprüft, ob das CSRF-Token tatsächlich im HTML-Code der Seite enthalten ist.

Hat jemand eine Ahnung, warum das passiert?

BEARBEITEN

Um die Fragen in den Kommentaren zu beantworten: Die Versionen von Flask-WTF und WTForms in meinem Produktions-Docker-Container und in meiner lokalen virtuellen Entwicklungsumgebung sind identisch. Hier ist meine Anforderungsdatei, die aus meiner Entwicklungsumgebung stammt und zum Einrichten meiner App im Docker-Container verwendet wurde:

Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Migrate==1.2.0
Flask-MySQL==1.2
Flask-Principal==0.4.0
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-Security==1.7.4
Flask-WTF==0.10.2
Flask-WhooshAlchemy==0.55a
Jinja2==2.7.3
Mako==1.0.0
MarkupSafe==0.23
PyMySQL==0.6.2
SQLAlchemy==0.7.9
Tempita==0.5.2
WTForms==2.0.1
Werkzeug==0.9.6
Whoosh==2.6.0
alembic==0.6.7
blinker==1.3
chardet==2.2.1
decorator==3.4.0
itsdangerous==0.24
lamson==1.3.4
passlib==1.6.2
py-bcrypt==0.4
pytz==2014.9
sqlalchemy-migrate==0.7.2

Dessen ungeachtet befinden sich ein paar zusätzliche Module in meinem Docker-Container, da uWSGI und meine Flaschen-App installiert wurden. Hier sind die zusätzlichen.

argparse (1.2.1)
colorama (0.2.5)
docutils (0.12)
html5lib (0.999)
lockfile (0.10.2)
mock (1.0.1)
MySQL-python (1.2.5)
nose (1.3.6)
python-daemon (2.0.5)
python-modargs (1.7)
requests (2.2.1)
six (1.5.2)
urllib3 (1.7.1)
uWSGI (2.0.10)
wheel (0.24.0)
wsgiref (0.1.2)

Wow, also mehr als ein paar. Vielleicht habe ich ein widersprüchliches Paket?

Regarding SECRET_KEY und CSRF_SESSION_KEY: Ich hatte SECRET_KEY in meiner config.py definiert. Ich wurde zu der Annahme geführt, dass ohne die Definition von CSRF_SESSION_KEY standardmäßig SECRET_KEY verwendet wird. Trotzdem habe ich einen CSRF_SESSION_KEY definiert, aber es schien keinen Unterschied zu machen.

Zuletzt habe ich mir die API-Änderung von {{form.hidden_tag ()}} zu {{form.csrf_token}} angesehen. Sie haben immer noch Verweise auf beide Formulare in den Dokumenten für die neueste Version. Auf der CSRF-Seite haben sie die letztere, aber im Schnellstart haben sie immer noch die erstere. Ich bin mir nicht sicher, was damit los ist, aber um sicherzugehen, dass ich die Version auf der CSRF-Seite wie folgt implementiert habe:

dri .py:

from flask_wtf.csrf import CsrfProtect

CsrfProtect(app)

user_login.html

<form>
    {{ form.csrf_token }}
    ...
</form>

Aber ich bekomme immer noch die gleiche Antwort.

Wie ich schon sagte, ist die Flask-WTF-Dokumentation überall. Also habe ich alle möglichen Kombinationen ausprobiert. Am Ende dieser Seite:http: //flask-wtf.readthedocs.org/en/latest/csrf.htm Sie verweisen auf einen falschen Import, daher habe ich mein @ ersetz

von flask_wtf Formular importieren

mi

von flask.ext.wtf Formular importieren

Noch keine Würfel. Vielen Dank für die Kommentare, gab mir mehr zum Ausprobieren!

Ich habe auch gerade versucht, alles in einem einzigen Docker-Container zusammenzufassen, erhalte aber immer noch das gleiche Ergebnis.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage