2017-08-30 14 views
0

最近、私は自分のアプリケーションで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) 
+0

テンプレートファイルを*フォーム*フィールド – Nabin

+0

@Nabinで表示すると、上記のことがわかります。私は質問を更新しました! – makmani

+0

何か提案の男の子、なぜ私は使用できない** sqlalchemy ** type with csrf token protection?ファイルシステムでは、アプリケーションは正常に動作しますが、データベースに格納したいと思っています!! – makmani

答えて

0

これは古い記事ですが、同じ問題を持つ人のためにあなたの設定に行の下に追加します。 cfgファイル 私のために働いた:

SESSION_COOKIE_DOMAIN = "your_server_address" 
関連する問題