我在我的 Rails 中使用 Devise 进行 auth 和 devise_invitable 向用户发送邀请。
我在登台和生产环境中遇到了一个奇怪的问题。这是我们本地环境或开发环境中没有出现的东西。环境之间的一个显着区别是,暂存环境和生产环境在应用服务器前面有负载平衡器,但其余设置是相似的。
当用户点击邀请链接(其中包含作为参数的原始令牌)时,看起来是随机的,原始令牌将在查找之前被散列到一个完全不同的值,从而导致查找失败。以下是一些示例日志。
数据库中的令牌:
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
这是我的邀请控制器的编辑方法的样子:
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
从日志中可以看出,参数中的原始令牌是相同的,但哈希值每次都不同。我(不幸的是)无法在开发人员或本地复制它。
有没有人遇到过这样的事情?