2013-07-23 1 views
0

레일즈 4로 업데이트되는 과정에서 오래된 레일스 2.0.2 어플리케이션을 해결하는 것은 흥미로운 과제이지만이 문제를 해결하기 위해 오래 기다릴 수는 없습니다. 문제는 궁극적으로 사용자를 웹 사이트에 온라인으로 연결하는 오프라인 콘텐츠를 배포하려고한다는 것입니다. 오프라인에서 온라인으로 전환하는 과정에서 오프라인으로 작성하는 양식이 있지만 사용자가 동일한 양식을 두 번 기입하지 않고도 양식의 온라인 버전에 데이터를 게시 할 수 있기를 원합니다. 내가보고있는 문제는 온라인 버전에서 변경되는 정품 인증 토큰을 처리하는 방법입니다. 누구든지이 문제를 해결할 수있는 방법에 대한 제안 사항이 있습니다. Authenticity Token의 목적은 내가하려는 일을 막는 것이지만, 예를 들어 오프라인 버전의 데이터로 온라인 버전을 미리 채우는 등의 방법으로 해결할 수 있습니까? 나는 어떻게 든 내가 온라인 양식 도메인의 쿠키에 동일한 session_id를 쓸 수 없다면 현재 작동중인 진품/세션 쌍을 재현 할 수 있다고 생각하지 않는다. 아니면 서버 쪽을 처리해야합니까? 나는이 문제에 대해 사용자 지정 코드 서버 측만있는 것을 피하려고 노력했다 ... 미리 응답 해 주셔서 감사합니다.레일즈 - 정품 인증 토큰 주위에서 작업

답변

1

온라인 양식으로 게시하는 대신 온라인 양식을 가져오고 은 검색어 문자열을 사용하여 입력란을 미리 채운다.

예를 들어, 이름과 성을 가진 오프라인 양식을 제출하면이 같은 GET 요청을 수행합니다

mysite.com/offline_form/new?first_name=Dick&last_name=Steele 

이 URL은 유효한 CSRF 토큰을 완료 라이브 new 양식을 렌더링합니다. 쿼리 문자열을 사용하여 입력 필드를 채 웁니다. 쿼리 문자열은 params[]을 통해 액세스 할 수 있습니다.

form_for :online do |f| 
    f.text_field :first_name, value: params[:first_name] 
    f.text_field :last_name, value: params[:last_name] 
    # ... 
end 

이렇게하면 두 번째 양식을 작성하지 않고도 CSRF 토큰 화 된 라이브 양식을 제출할 수 있습니다. 최소한 두 개의 제출 버튼을 클릭해야합니다. 양식의 온라인 버전을 확인 단계로 제출할 수 있습니다.

+0

감사합니다. gg_s! GET 작업이 끝나고 jQuery ("# form")를 추가했습니다. submit()을 사용하여 양식 자동 제출 – Craig