Rails で auth と devise_invitable に Devise を使用して、ユーザーに招待状を送信しています。
ステージング環境と本番環境で奇妙な問題が発生しました。これは、私たちのローカル環境や開発環境では発生しなかったものです。環境間の大きな違いは、ステージング環境と本番環境ではアプリ サーバーの前にロード バランサーがあることですが、残りのセットアップは似ています。
ユーザーが招待リンク (パラメーターとして raw トークンを含む) をクリックすると、一見ランダムに見えますが、ルックアップの前に raw トークンが完全に異なる値にハッシュされ、結果として失敗します。サンプル ログを次に示します。
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 (失敗)
Started GET "/organizations/7/invitation/accept?invitation_token=FopqamFqA7zhXgXkQXQ7" for 50.156.8.77 at 2014-10-03 17:54:58 +0000
Processing by InvitationsController#edit as HTML
Parameters: {"invitation_token"=>"FopqamFqA7zhXgXkQXQ7", "id"=>"7"}
User Load (1.2ms) SELECT `users`.* FROM `users` WHERE `users`.`invitation_token` = '69e87f81483b22c5be1a1b93dcb6fcebcd8396b172b7a85cbf17cb0ba5784cc8' ORDER BY `users`.`id` ASC LIMIT 1
Filter chain halted as :resource_from_invitation_token rendered or redirected
Invitations Controller の edit メソッドは次のようになります。
def edit
if resource.present? && resource.organization.present?
@guest_organization = resource.organization
end
super
end
関連するバージョン: ruby 2.1.2、rails 4.1.0、devise 3.2.4、devise_invitable 1.3.4
ログに表示されるように、params の生のトークンは同じですが、ハッシュ値は毎回異なります。私は(残念ながら)これをdevまたはローカルで複製できません。
誰かがこのようなことに遭遇しましたか?