2014-10-03 2 views
1

저는 Auth에 대해 내 레일에서 Devise를 사용하고 사용자에게 초대장을 보내려면 devise_invitable을 사용하고 있습니다.동일한 초대 토큰에 대해 다른 해시 된 값

스테이징 및 프로덕션 환경에서 이상한 문제가 발생했습니다. 이것은 우리 지역 환경이나 개발 환경에서 나오지 않은 것입니다. 환경 간의 중요한 차이는 준비 및 프로덕션 환경에 응용 프로그램 서버 앞에로드 밸런서가 있지만 나머지 설정은 비슷하다는 것입니다.

사용자가 초대형 링크 (원시 토큰을 매개 변수로 포함 함)를 클릭하면 임의의 순서로 원시 토큰이 완전히 다른 값으로 해시되고 결과가 실패합니다. 다음은 몇 가지 샘플 로그입니다. DB에서

토큰 :

5d44e5c9175eebbd93737ad9db2bc83fe252c89218e6767a42c1ff8b85dd8029

요청 1

Started GET "/organizations/7/invitation/accept?invitation_token=FopqamFqA7zhXgXkQXQ7" for 50.156.8.77 at 2014-10-03 17:40:28 +0000 
Processing by InvitationsController#edit as HTML 
Parameters: {"invitation_token"=>"FopqamFqA7zhXgXkQXQ7", "id"=>"7"} 
User Load (1.6ms) SELECT `users`.* FROM `users` WHERE `users`.`invitation_token` = 'cf7f5029d134035c196739e8c5be9a9cdc54ad3fb9ae349f6567d29aea8b7165' ORDER BY `users`.`id` ASC LIMIT 1 
Filter chain halted as :resource_from_invitation_token rendered or redirected 

요청 2 (성공을)

Started GET "/organizations/7/invitation/accept?invitation_token=FopqamFqA7zhXgXkQXQ7" for 50.156.8.77 at 2014-10-03 17:49:41 +0000 
Processing by InvitationsController#edit as HTML 
Parameters: {"invitation_token"=>"FopqamFqA7zhXgXkQXQ7", "id"=>"7"} 
User Load (1.5ms) SELECT `users`.* FROM `users` WHERE `users`.`invitation_token` = '5d44e5c9175eebbd93737ad9db2bc83fe252c89218e6767a42c1ff8b85dd8029' ORDER BY `users`.`id` ASC LIMIT 1 

요청 3 (실패)

을 (실패) , 3.2.4을 고안, 1.3.4

로를 devise_invitable, 루비 2.1.2 4.1.0 레일 :

def edit 
    if resource.present? && resource.organization.present? 
     @guest_organization = resource.organization 
    end 
    super 
end 

관련 버전 : 여기

95,883,343,210 내 초대장 컨트롤러의 편집 방법은 모습입니다 로그에 표시되면 매개 변수의 원시 토큰은 동일하지만 해시 값은 매번 다릅니다. 나 (안타깝게도) dev 또는 로컬에서이를 복제 할 수 없습니다.

아무도 이런 식으로 실행하지 않았습니까?

답변

1

Devise uses the app's secret_key_base to to generate the digest. - 해시 토큰 불일치의 결과로

Ginseng::Application.config.secret_token = "#{SecureRandom.hex(64)}" 
Ginseng::Application.config.secret_key_base = "#{SecureRandom.hex(64)}" 

는 그래서 secret_key_base 모든 배포/재시작하여 변경하고 각 응용 프로그램 서버에서 달랐다 :

난 내이로 설정했다. 이것에

변경 secret_token.rb는 :

Ginseng::Application.config.secret_token = ENV['secret_token'] 
Ginseng::Application.config.secret_key_base = ENV['secret_key_base'] 

문제를 해결했다.

+1

Sergio (https://github.com/scambra/devise_invitable/issues/505) 덕분에 여기에 왔습니다. –