フラスコ wtforms を使用して非常に単純なログイン フォームをセットアップしようとしています。
何らかの理由で、検証例外が発生しています
{'csrf_token': ['The CSRF tokens do not match.']}
ここにhtmlがあります
<form method="POST" action="/login">
{{ form.csrf_token }}
<div class="login">
{{wtf.form_field(form.username)}}
{{wtf.form_field(form.password)}}
</div>
<input class="btn btn-primary" type="submit" value="login">
ここに関連するスニペットがあります
@app.route('/login', methods=["GET", "POST"])
def login():
form = LoginForm()
if request.method == 'POST':
from itsdangerous import BadData, SignatureExpired, URLSafeTimedSerializer
from flask import session
app.logger.debug("Token in session")
app.logger.debug(session['csrf_token'])
from werkzeug.security import safe_str_cmp
s = URLSafeTimedSerializer(app.secret_key, salt='wtf-csrf-token')
token = s.loads(form.csrf_token.current_token, max_age=3600)
app.logger.debug("Token calced")
app.logger.debug(token)
app.logger.debug("ret from safe_cmp = ")
app.logger.debug(safe_str_cmp(session['csrf_token'],token))
app.logger.debug(form.meta.csrf_context)
app.logger.debug(form.meta.csrf_secret)
app.logger.debug(form.csrf_token.current_token)
app.logger.debug(app.secret_key)
app.logger.debug("login")
if form.validate_on_submit():
# irrelevant login code
login_user(user)
else:
app.logger.debug("Validation error")
app.logger.debug(form.errors)
エラーを見つけるために wtforms のデバッグを試みましたが、ログからはすべて問題なく、トークンが一致しているように見えます..
同じトークンのように見えるので、なぜ失敗するのか本当にわかりません..
form.csrf から に前後に変更しようとしましたがform.hidden_tag()
、ここで説明されているように csrf クラスを使用しようとしましたhttps://flask-wtf.readthedocs.io/en/v0.12/csrf.html
何も動作していないようです..どんな助けでも素晴らしいでしょう..