2016-06-30 3 views
0

내 HEAD 태그에 <%= csrf_meta_tags %>이 있었지만 수동으로 양식을 만들었으므로 authenticity_token 숨겨진 필드가 내 양식에 삽입되지 않았습니다. 수동으로 토큰을 확인했지만 백엔드에서 확인되지 않았습니다.

은 그래서 수동으로 authenticity_token 추가 : 내 웹 사이트의 기본 연락처 양식 (사용자가 로그인하지)는 토큰을 확인하고 수/요청을 거부해야 처리 작업을 보내

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 

. 하지만 그렇지 않습니다 : jQuery를 사용하여 필드를 비우고 양식을 제출할 수 있지만 오류나 예외는 발생하지 않습니다.

application_controller.rb이고 application_controller를 확장하는 foo_controller.rb에 넣고 문의 양식에 응답하는 작업을합니다.

그래서 나는 무엇을 놓치고 있습니까? 이 양식을 백엔드에서 검증하려면 어떻게해야합니까?

고맙습니다.

+0

응용 프로그램 컨트롤러가 가지고있는 한'foo_controller.rb'에서'protect_from_forgery with : : exception'을하지 않아도됩니다. 귀하의 설정은 일반적으로 옳지 만 귀하의보고 양식/자바 스크립트 코드가 없으면 더 많이 알려주지 않으므로 추가하십시오. –

답변

0

제출 된 인증 토큰이 누락되었거나 세션에서 일치하지 않으면 레일스는 protect_from_forgery with:이 지정하지만 요청 처리가 종료되지 않습니다. 세션이 파괴되어 요청이 로그인하지 않은 사용자에게 속한 것으로 처리됩니다.

여기에 how protect_from_forgery works에 대한 훌륭한 글을 올리실 수 있습니다.

코드를 보지 않고 말하기는 어렵지만 양식 제출 코드는 인증 토큰 입력 값을 가져 오지 못하거나 요청이 이루어지기 전에 부실해집니다. 후자는 브라우저 캐시에서로드 된 페이지 또는 문제의 페이지와 동시에 로그인/로그 아웃하는 데 사용되는 브라우저 탭과 같은 여러 시나리오에서 발생할 수 있습니다.