Rails字符串比较在十六进制字符串上失败

时间:2012-05-03 12:42:05

标签: ruby-on-rails ruby ruby-on-rails-3

我目前正在构建一个邀请模型,通过链接发送电子邮件邀请。链接使用sha1哈希“保护”。但是,控制器无法验证散列,我无法弄清楚为什么......

生成的链接看起来像

/projects/1/invitations/12?hash=c043b70c359a85e20cd9933c9cd37ef3f8943d7b

并且控制器尝试使用

验证它们
def show
    @invitation = Invitation.find(params[:id])
    if @invitation.hash.to_s != params[:hash].to_s
       redirect_to root_url
       ....

字符串比较每次都失败。我已经三重检查,但字符串似乎完全相同。

编辑:一些调试信息

logger.debug params
logger.debug @invitation.hash

在development.log

中产生以下输出
{"hash"=>"c043b70c359a85e20cd9933c9cd37ef3f8943d7b", "action"=>"show",
controller"=>"invitations", "project_id"=>"1", "id"=>"12"}
c043b70c359a85e20cd9933c9cd37ef3f8943d7b

1 个答案:

答案 0 :(得分:1)

查看@invitation.hash实际上是否正在调用Object#hash