代码之家  ›  专栏  ›  技术社区  ›  Ben Scheirman

Rails Recaptcha插件始终返回false

  •  1
  • Ben Scheirman  · 技术社区  · 15 年前

    我正在使用这里找到的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
    

    我的问题是核实一下 总是 返回false。

    我一定错过了一些简单的东西,但我看不到。 在我得到一个明智的ALEC回复之前,是的,我在验证码框中输入了正确的单词:)

    2 回复  |  直到 15 年前
        1
  •  5
  •   Jorge Israel Peña    15 年前

    正如一个注释,确保您没有意外地切换公钥和私钥;它们是不同的。

    我不知道你是否已经在处理 正确,在这种情况下,您需要这样的内容:

    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。

        2
  •  2
  •   Yehuda Katz    15 年前

    我进去看了一下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" ,因此代码应该通过。

    您是否可以尝试使用net::http直接发送响应,并查看得到的响应?