2016-08-19 5 views
0

すべてのリクエストに対してCSRFフィルタを有効にしたくありません。 しかし、私のフォームでそれを使いたい。 だから私は、コントローラにこのようCSRFAddTokenとCSRFCheckを使用します。Play Framework 2.5 CSRFチェックに失敗しましたajax

def change(lng: String) = checkToken { 
     Action { implicit request => 
      registerForm.bindFromRequest.fold(
      { formWithErrors => 
       Ok(Json.toJson(JsObject(Map("status" -> JsString("error"), "message" -> JsString(messagesApi.translate("register.all_fields_required", Seq()).get))))) 
      }, 
      value => 
       [Code was cutted] 
     ) 
     } 
    } 

    def getCurrent(lng: String) = addToken { 
    Action { implicit request => 
     Ok(views.html.profile_edit_popup()) 
    } 
    } 

ビューでは、私はちょうどその時、私はアヤックスを使用してgetCurrentアクションを取得し、フォームのHTMLを取得 を形成するために、CSRFを追加する

@CSRF.formField 

を使用し、 save on私はAjaxを使ってアクションを変更します。問題は、私は

CSRFトークンチェックを提出する上で

エラーを失敗した取得しています。それでも私はCSRFの隠れたフィールドをフォームに表示します。私は間違っているの?

+0

あなたのjQueryなど、 'csrfToken'フィールドを正しくピックアップしていないことがありますか? –

+0

'Csrf-Token'ヘッダも設定する必要があります! [この例](https://github.com/mohiva/play-silhouette-angular-seed/blob/9008dd9a93ff7fcfcfba8c182903b0a997beb034/ui/app/scripts/app.js#L62)を参照してください。 CSRFトークンがカスタムCookieとして送信されることに注意してください(app.confを参照)。 –

+0

@ insan-eあなたは正しいです。答えることができますか? – user2975535

答えて

3

あなたのJavaScriptライブラリがcsrfTokenフィールドを正しくピックアップしていない可能性がありますか?たとえば、あなたがissueコンフィグ設定によってはjQueryのtext()代わりval() ...

のを使用していることができるとき、あなたはCsrf-Token値が欠落することができます。 Playでは、ヘッダー(セッション)AND(フォームORクエリ文字列内)にCSRFトークンが必要です。詳細情報here

関連する問題