2016-04-15 24 views
0

私はpython-flaskangularで始まり、this snippetを使ってcsrfを処理しました。 ajaxコールでは、常に403エラーが出ます。私は、私はここで間違って何を得ていないよ。 私は多くの答えを見つけ、google searchにあるすべてのオプションを試しました。しかし、運がない。私は間違いをしているところには行きません。フラスコとcsrfトークン

フラスココード:

@app.route('/targetapi/', methods=['POST']) 
def fetch_targets(): 
    """ """ 
    data_dict = {} 
    acc_ids = request.args['acc_ids'] 
    data_dict['username'] = session.get('username') 
    data_dict['targets'] = some_func(acc_ids) 
    return jsonify(data_dict) 

角度コード: HTMLページ:

<input name="_csrf_token" type=hidden ng-model="csrf_token" ng-init="csrf_token='{{ csrf_token() }}'" > 

Ajax呼び出し:

$http({ 
     method : "POST", 
     url : '/targetapi/', 
     headers : { xsrfHeaderName: 'X-CSRFToken', xsrfCookieName : csrf_token }, 
     data : { acc_ids : accountIDs }     
}) 

わからない、なぜ私は403禁止応答を取得しています

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>403 Forbidden</title> 
<h1>Forbidden</h1> 
<p>You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.</p> 

*クロームはPOSTリクエストの前にオプションのリクエストを送信している場合クローム開発者用ツールの

+0

どのようにCSRFから保護するためにFlaskを設定しますか?フラスコ - WTF?フラスコ - シーサフ?いくつかの他の方法? –

+0

@ JakubP。 - flask_wtf – trex

+0

1)あなたはhttp://flask-wtf.readthedocs.org/en/latest/csrf.htmlを慎重に読み、2)AJAX呼び出しは実際にはX-CSRFTokenヘッダーにHTMLページがFlaskテンプレートに挿入されている、そして3)flask_wtf configがデフォルトから変更されていない(http://flask-wtf.readthedocs.org/en/latest/config.html) Flask-WTFを使用している場合、どうして6年前のスニペットにリンクしたのですか?(なぜなら、0.9.0のバージョン要件に注意してください) –

答えて

1

チェックから貼り付け応答。もしそうなら、あなたは次のようなものを試すことができます:

from flask import current_app 

    @app.route('/targetapi/', methods=['POST', 'OPTIONS']) 
    def fetch_targets(): 
     if request.method=='OPTIONS': 
      response = current_app.make_default_options_response() 
     else: 
      data_dict = {} 
      acc_ids = request.args['acc_ids'] 
      data_dict['username'] = session.get('username') 
      data_dict['targets'] = some_func(acc_ids) 
      return jsonify(data_dict)