1

标题中的错误仅在 firebug 中可见。我将recaptcha元素放在下面的所有内容都没有显示在页面上,但存在于页面源(Mozilla和Opera)中 - 尽管firebug中没有显示错误。

到目前为止,基于其他解决方案,我已经尝试反转密钥(公共和私有,尽管它们被明确标识),生成全局密钥对并使用它们,甚至将值硬编码到 recaptcha.rb 初始化程序中文件与使用系统变量。在开发或生产中的任何情况下都没有运气。还尝试抑制“noscript”部分,没有任何变化。

Gem 生成的页面源代码如下:

    <script type="text/javascript" src="//www.google.com/recaptcha/api/challenge?k=[" mypublickeyhere", "myprivatekeyhere", false]&amp;lang="></script>
    <noscript>
      <iframe src="//www.google.com/recaptcha/api/noscript?k=["mypublickeyhere", "myprivatekeyhere", false]" height="300" width="500" style="border:none;"></iframe><br/>
      <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
      <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/></noscript>

为什么我的私钥在页面源中可见?所有这些代码都来自于我的观点:

    <%= recaptcha_tags %>

编辑:通过强制输入表单和控制器中的键,在几个小时内取得了一些进展:

    <%= recaptcha_tags :public_key => 'mypublickeyhere' %>

    if ( verify_recaptcha :private_key => 'myprivatekeyhere' )

这让 recaptcha 显示在表单上,​​并防止我的私钥像在“默认”模式下那样被插件发送到页面代码中。

不幸的是,即使验证码输入正确,我们也会收到一个新错误,“invalid-request-cookie”。

是否有在 Rails 3 中使用此插件的单个示例,具有完整的工作形式和控制器代码?


其他患者的更多信息:

谷歌说这个错误的意思是:“验证脚本的挑战参数不正确。”

在另一个页面上,如果您搜索“挑战参数”以找出任何内容,Google 会说:“recaptcha_challenge_field 是一个隐藏字段,用于描述用户正在解决的验证码。它对应于reCAPTCHA 验证 API。”

那么为什么插件没有提供正确的挑战参数呢?也许我需要在某个地方传递一些东西——但是什么和在哪里?同样,一个简单的例子会很棒。

4

1 回答 1

2

0.0。设置变量 - 旁白:

使用 ENV['key'] 将您的密钥保留在代码库之外(尽管您可以在 /config/environments/development.rb 中对它们进行硬编码,然后不要将此文件包含在您的生产服务器上(对于 Heroku,在您的推送中添加到 gitignore文件夹)。

我将此添加到我的 development.rb 文件中

  # Set variables for Recaptcha on Localhost
    ENV['RECAPTCHA_PUBLIC_KEY'] =  'mypublickeyhere'
    ENV['RECAPTCHA_PRIVATE_KEY'] = 'myprivatekeyhere'

您将把您的真实密钥值放在 mybpublickeyhere 和 myprivatekeyhere 的位置。

您还可以在您的开发机器上设置 ENV 变量。我不想添加那种混乱,因为这台机器用于一次开发许多站点。

如果部署到 Heroku,请在此处了解如何设置这些 ENV 变量:http: //devcenter.heroku.com/articles/config-vars

1.0 获取一组全局密钥,不绑定到任何特定域,并使用它们进行测试。消除该潜在问题后,当一切正常时,将您的域特定密钥放入您的生产机器上,然后重新测试。

2.0 不要使用“默认”方法。据我所知,它根本不起作用——也许它曾经做过,谷歌改变了一些东西——我不知道,但它可能/会给你可怕的“输入错误:k:站点密钥格式无效”和将向查看页面源的任何人透露您的私钥。

解决方案是将密钥强制输入表单和控制器。因此,在您的表单中,这将如下所示:

    <%= recaptcha_tags :public_key => ENV['RECAPTCHA_PUBLIC_KEY'] %>

3.0 在您的控制器中,您将测试是否为真;但同样,像这样强制输入私钥:

    if ( verify_recaptcha :private_key => ENV['RECAPTCHA_PRIVATE_KEY'] ) 
    ... your success code here
    else
    ... your fail code here
    end

4.0 在表单中放置标签很重要。Devise 文档引用了这个 gem,并提供了使用这个 gem 的 实际示例代码:http: //github.com/plataformatec/devise/wiki/How-To :-Use-Recaptcha-with-Devise 他们说要把 recaptcha_tags提交按钮代码的正上方。这个很重要。我不得不把它放在:

    <div class="form-actions">

...连同按钮

其他消息来源报告说,围绕 HTML 可能会以神秘的方式破坏事物,因此您可能需要尝试一段时间(希望您没有截止日期或其他任何事情)。这些“放置”问题是我收到的“无效请求cookie”错误的罪魁祸首。

我希望这些指南可以缩短您的开发时间。

于 2013-10-05T08:06:10.803 回答