2011-09-25 5 views
2

방금 ​​3 개의 앱을 SSL로 전환 한 다음 비밀번호 복구 토큰이 더 이상 프로덕션 환경에서 작동하지 않는다는 사실을 확인했습니다. 사용자가 전자 메일 링크를 사용하여 암호를 재설정하려고하면 "유효하지 않은 토큰"이라고 표시됩니다.이 ssl로 전환되고 토큰을 작성하는 것이 잘못되었습니다.

나는 1.3.4을 고안, 레일 3.0.0를 사용하고, 우리의 사용자 모델은이 : 나는 ssl_requirement 같은 것을 사용하지 않는

devise :database_authenticatable, :invitable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

, 우리가 보편적으로 응용 프로그램에서 SSL을했기 때문에. 오래된 토큰이 만료되지 않았는지 확인하기 위해 오래된 토큰을 만료했습니다. 나는 당황 스럽다.

답변

3

이것은 우리의 nginx 설정에 문제가 있었으며, Devise와는 전혀 관련이 없습니다. 그러나 다른 누구도 비슷한 입장에 서게되면 다음과 같은 일이 일어납니다. 우리는 일반 http URL을 https로 리디렉션하도록 nginx를 설정했습니다. 누군가 domain.com에서 www.domain.com으로 https://www.domain.com으로 갔을 때 특별히 이중 재 작성했습니다. 그리고 reset_code가 두 번째로 추가되도록 reset_code는? reset_code = 12345? reset_code = 12345와 같이 앱으로 전달됩니다. 지금

# rewrite^https://$server_name$request_uri permanent; 
rewrite ^(.*) https://$host$1 permanent; 

하고 단지 최적화

rewrite ^(.*)$ https://www.domain.com$1 permanent; 

모두 더 나은 :

그래서 우리는 우리의 nginx의 이렇게 설정을 변경했습니다.

0

위의 답변이 정확합니다. 그러나 이것은 일시적인 해결책이며 궁리 용으로 만 작동합니다. 그러나 문제는 전자 메일을 통해 확인 토큰을 수동으로 보낼 때 발생합니다. 영구히 수정할 수 있습니다. 환경/생산 환경으로 이동하십시오. 이 라인

config.action_mailer.default_url_options = 변경 {: 호스트 => '도메인 이름', : 프로토콜 => "HTTP"}

config.action_mailer.default_url_options에를 = {: 호스트 => '도메인 이름', : 프로토콜 => 'https'}

관련 문제