2016-08-19 4 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()) 
    } 
    } 

보기에서 난 그냥 그런 을 형성 CSRF를 추가

@CSRF.formField 

을 사용 나는 아약스 사용하고 양식 HTML을 얻기에 getCurrent 조치를 얻을 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 토큰은 사용자 정의 쿠키로 전송됩니다 (app.conf 참조). –

+0

@ insan-e 당신이 옳았다. 대답 해 줄 수 있니? – user2975535

답변

3

JavaScript 라이브러리가 csrfToken 필드를 올바르게 인식하지 못했을 수 있습니까? val() 대신 jQuery의 text()를 사용하는 경우 예를 들어, 당신은 당신의 구성 설정에 따라

, 당신은 Csrf-Token 값이 누락 될 수 ... issue있을 수 있습니다. Play는 헤더 (세션) AND (형식 OR 쿼리 문자열)의 CSRF 토큰을 원합니다. 더 많은 정보 here.

관련 문제