2010-04-07 5 views
4

방금 ​​양식을 제출하면 잘못된 AuthenticityToken 오류가 발생하는 방금 배포 한 레일 앱이 있습니다. 앱은 하위 도메인을 계정 이름으로 사용하며 결국 맞춤 도메인을 입력 할 수도 있습니다. production.rb에 도메인 간 세션 처리를 허용하는 항목이 있습니다.어디서나 AuthenticityToken이 유효하지 않습니다.

문제는 모든 것이 잘못된 AuthenticityToken 오류를 발생 시키므로 로그인하거나 양식을 제출할 수 없다는 것입니다. 문제는 유사하지만 외모가 같지 않습니다. Rails - Invalid Authenticity Token After Deploy와 mongrel을 사용하지 않았습니다. 브라우저에서 쿠키를 지우고 승객을 재시동했지만 운이 없었습니다.

누구든지 아이디어가 있습니까?

서버에서 nginx + passenger 2.3.11 및 Rails 2.3.5가 실행 중입니다.

#production.rb 
config.action_controller.session[:domain] = '.domain.com' 


#environment.rb 
config.action_controller.session = { 
    :session_key => '_app_session', 
    :secret  => '.... nums and chars .....' 
} 

업데이트 : 난 그냥 세션 쿠키가 내 프로덕션 환경에서 설정되지 않습니다되는 것으로 나타났습니다. 따라서 저는 세션이 CSRF 가치에 묶여있을 수 없다고 생각합니다. 설정되지 않은 쿠키가 동적 하위 도메인과 관련이 있는지 궁금합니다.

답변

0

는이

<%= javascript_tag "window._token = '#{form_authenticity_token}'" %> 

또는 REF를 TRY - http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

+0

주사위가 없습니다. form_authenticity_token JS 변수는 양식에서 출력되는 내용과 일치하며, 오류의 일부로 매개 변수가 덤프 될 때 서버에 제출되는 것을 볼 수 있습니다. 제출되는 토큰이 서버에있는 파일과 다릅니다. – bwizzy

0

시도는 당신의 ApplicationController에 다음과 같은 추가 :

protect_from_forgery :only => [:create, :delete, :update] 

솔루션을 http://www.ruby-forum.com/topic/136093에서. 가장 안전한 솔루션이 아닐 수도 있습니다.

+0

은 SessionsController # create (및 다른 양식 제출)가 오류를 던지고 있기 때문에 작동하지 않습니다. 게다가 난 csrf 보호를 비활성화하지 않을거야 – bwizzy

2

서버가 올바른 도메인 이름을 가지도록 구성되었는지 확인하십시오. 진위 성 토큰에 대한 쿠키가 실제로 서버가 아닌 다른 도메인으로 설정 될 때이 것을 보았습니다. 클라이언트는 쿠키를 보낼 필요가 있음을 알지 못합니다.

프로덕션 세션 저장소가 어떤 식 으로든 손상 될 수도 있습니다. Rails가 사용자 세션을 찾을 수 없으면 InvalidAuthenticityToken으로 실패합니다.

+0

내 nginx 가상 호스트 파일에 와일드 카드 설정이 있지만 내 하위 도메인 중 하나에 대한 특정 경로를 추가하고 여전히 그것을 고치지 않았다. – bwizzy

관련 문제