In meinen Projekten __init__.py ich dieses:Flask disable CSRF in Unittest
app = Flask(__name__)
app.config.from_object('config')
CsrfProtect(app)
db = SQLAlchemy(app)
Meine Entwicklung config-Datei wie folgt aussieht:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
DEBUG = True
WTF_CSRF_ENABLED = True
SECRET_KEY = 'supersecretkey'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'project.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
Und in meinem Unittest setUp Ich habe diese:
Theoretisch sollte das Setzen von WTF_CSRF_ENABLED auf False hier CSRF für die Komponententests verhindern, aber ich bekomme immer noch CSRF-Fehler, wenn ich Führen Sie während des Komponententests einen POST durch. Ich denke, das liegt daran, dass ich CsrfProtect (App) bereits aufgerufen habe, während WTF_CSRF_ENABLED True ist (wenn ich eine App importiere, wird sie aufgerufen). Wenn ich WTF_CSRF_ENABLED = False in der Konfigurationsdatei einstelle, funktioniert es wie erwartet.
Kann ich CSRF trotzdem deaktivieren, nachdem es bereits aktiviert wurde? Oder belle ich hier den falschen Baum an?
Ich denke, sobald Sie App importieren, dass Code ausgeführt wird, wird es daher mit Ihrer Standardkonfiguration ausgeführt, so dass danach, wenn Sie Ihren Test machen, ist es egal, dass Sie die Konfiguration überschreiben – limbo
Ja, das ist mein Gedanke auch. Ich hoffe, es gibt eine Möglichkeit, es nach der Tat zu deaktivieren, vielleicht nicht durch app.config, aber so etwas wie StopCsrfProtect (app) oder so. Aber das ist wahrscheinlich Wunschdenken. – vimalloc
Ich denke, die einfachste Problemumgehung besteht darin, sie einfach mit deaktiviertem CSRF auszuführen, wenn Sie testen. – limbo