Recaptcha ambethia - 输入错误:k:站点密钥的格式无效/ invalid-request-cookie

时间:2013-10-04 11:47:55

标签: ruby-on-rails-3 recaptcha

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

到目前为止,基于其他解决方案,我尝试了反转密钥(公共和私有,尽管它们已被清楚地识别),生成全局密钥对并使用它们,甚至将值硬编码到重新计算中.rb初始化文件与使用system-vars。在开发或生产的任何情况下都没有运气。还试图压制'noscript'部分,没有任何改变。

宝石生成的页面来源读取:

    <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' )

这会使重新显示在表单上显示,并使我的私钥不被插件发送到页面代码,就像在“默认”模式下一样。

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

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


其他患者的更多信息:

Google表示此错误表示:“验证脚本的质询参数不正确。”

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

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

1 个答案:

答案 0 :(得分: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不要使用'default'方法。据我所知,它根本不起作用 - 也许它曾经做过而谷歌改变了一些东西 - 我不知道,但它可能/会给你可怕的“输入错误: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”错误的罪魁祸首。

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