最近、私は自分のアプリケーションでflask_session拡張を使い始めました。また、セキュリティ目的のためにフラスコのwtf.csrf拡張トークンを使用しています。私のアプリケーションでflask_sessionを使用した場合、なぜ400エラーが発生しますか?
は今、flask_session前に、アプリケーションは完全に働いたが、私はflask_sessionをインストールし、私は実際には、ログインするか、アプリケーションが私に400 Bad Request The CSRF session token is missing.
を与えて登録しようとした場合、それは私のconfig.pyでパラメータ設定されたとき、私は含めていますcsrf_tokenは、すべての私の要求にもajax要求を含む。
セッション収納タイプはsqlalchemy
です:
SESSION_COOKIE_NAME = 'booking'
SESSION_TYPE = 'sqlalchemy'
PERMANENT_SESSION_LIFETIME = timedelta(seconds=120)
SESSION_SQLALCHEMY_TABLE = 'sessions'
SESSION_KEY_PREFIX = 'booking'
私が言及するのを忘れてしまった私は、エラーが表示されない「ファイルシステム」にタイプを変更した場合、私は気づきました。
詳細はflask_session documentationです。
ログインテンプレート:
<form class="login_form" role="form" action="{{url_for('client.login')}}" method="post">
{{ login_form.hidden_tag() }}
{% if login_form.telephone.errors %}
{% for e in login_form.telephone.errors %}
<p class="text-error">{{e}}</p>
{% endfor %}
{% endif %}
{{login_form.telephone(class="_bit mat_input", id="form-phone-number", placeholder="You login")}}
{% if login_form.password.errors %}
{% for e in login_form.password.errors %}
<p class="text-error">{{e}}</p>
{% endfor %}
{% endif %}
{{login_form.password(class="_bit mat_input", id="form-password", placeholder="Your password")}}
<a href="" class="login_button">
<button type="submit" class="mat_button _bib">Login</button>
</a>
<div class="_dis_b rfb">
<div class="remember_row">
<label for="remember" class="remember">remember me</label>
{{login_form.remember_me(id="remember", class="check")}}
</div>
<div class="forgot_row">
<a href="javascript:void(0);" class="forgot">Forgot password?</a>
</div>
</div>
</form>
クライアントviews.py:
@client_route.route('/client/cat-<dir_code>/login', methods=['GET','POST'])
def login():
form_login = ClientLogin()
if request.method == 'GET' and request.args.get('next'):
session['next'] = request.args.get('next')
if form_login.validate_on_submit():
user = Client.query.filter_by(
tele = form_login.telephone.data
).first()
if user:
if check_password_hash(user.password, form_login.password.data):
session['client_logged_in'] = user.name
session['client_family'] = user.family
session['client_image'] = user.image
session['client_phone'] = user.tele
if 'next' in session:
next = session.get('next')
session.pop('next')
return redirect(next+'?current_user='+session.get('client_logged_in')+'+'+session.get('client_family'))
else:
return redirect(url_for('client.lenta', dir_code=g.current_directory)+'?current_user='+session.get('client_logged_in')+'+'+session.get('client_family'))
else:
flash('Invalid credentials.', 'danger')
return redirect(url_for('client.login', dir_code=g.current_directory))
else:
flash('Invalid credentials.', 'danger')
return redirect(url_for('client.login', dir_code=g.current_directory))
return render_template('client/login.html', user=user, form_login=form_login)
テンプレートファイルを*フォーム*フィールド – Nabin
@Nabinで表示すると、上記のことがわかります。私は質問を更新しました! – makmani
何か提案の男の子、なぜ私は使用できない** sqlalchemy ** type with csrf token protection?ファイルシステムでは、アプリケーションは正常に動作しますが、データベースに格納したいと思っています!! – makmani