我正在使用此处找到的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回复之前,是的,我在验证码框中输入正确的字词:)
答案 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直接发送响应并查看您获得的响应吗?