Rails Recaptcha插件总是返回false

时间:2009-07-02 20:45:18

标签: ruby-on-rails recaptcha

我正在使用此处找到的rails recaptcha插件:http://github.com/ambethia/recaptcha/tree/master

我已经在recaptcha.com上注册了一个帐户,获得了一个公共&私钥,该站点配置了全局密钥(暂时)。

config/environment.rb我设置了环境变量:

ENV['RECAPTCHA_PUBLIC_KEY'] = 'xxxxxxxxxxxxxxxx'
ENV['RECAPTCHA_PRIVATE_KEY'] = 'XXXXXXXXXXXXXXxx'

在我看来,我像这样渲染验证码:

<%= recaptcha_tags %>

在我的控制器处理这个表格时我有这个:

unless verify_recaptcha #   <--  always returns false
    flash[:error] = "Your captcha entry was invalid"
    render :action=>'new'
    return
end

我的问题是verify_recaptcha 总是返回false。

我必须遗漏一些简单的东西,但我没有看到它。 在我收到smart-alec回复之前,是的,我在验证码框中输入正确的字词:)

2 个答案:

答案 0 :(得分:5)

正如笔记一样,请确保您不会意外地切换公钥和私钥;他们是不同的。

我不知道你是否已经处理了 正确的可能性,在这种情况下你会想要这样的东西:

if verify_recaptcha
  @thing.save!
  redirect_to success_path
else
  flash[:error] = "There was an error with the recaptcha code below. Please re-enter the code and click submit." 
  render :action => 'new'
end

请记住使用:

<%= recaptcha_tags :ssl => true %>

如果您使用的是SSL。

答案 1 :(得分:2)

我进去看了一下recaptcha插件。相关部分的内容如下:

recaptcha = Net::HTTP.post_form URI.parse("http://#{server}/verify"), {
            "privatekey" => private_key,
            "remoteip"   => request.remote_ip,
            "challenge"  => challenge,
            "response"   => response
          }

这需要挑战和响应并返回响应。当我尝试挑战并生成响应时,我得到了"true\nsuccess"。如果符合以下代码行返回false

answer, error = recaptcha.body.split.map { |s| s.chomp }
unless answer == "true"

自从我回来"true\nsuccess"后,答案将为"true",因此代码应该通过。

您可以尝试使用Net :: HTTP直接发送响应并查看您获得的响应吗?