1

我正在使用在这里找到的 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 回复之前,是的,我在验证码框中输入了正确的单词 :)

4

2 回答 2

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。

于 2009-07-03T07:10:14.053 回答
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 直接发送响应并查看您得到的响应吗?

于 2009-07-03T06:23:33.857 回答