标题中的错误仅在firebug中可见。我将recaptcha元素放在下面的所有内容都没有显示在页面上,尽管它存在于页面源代码(Mozilla和Opera)中 - 尽管firebug中没有显示错误。
到目前为止,基于其他解决方案,我尝试了反转密钥(公共和私有,尽管它们已被清楚地识别),生成全局密钥对并使用它们,甚至将值硬编码到重新计算中.rb初始化文件与使用system-vars。在开发或生产的任何情况下都没有运气。还试图压制'noscript'部分,没有任何改变。
宝石生成的页面来源读取:
<script type="text/javascript" src="//www.google.com/recaptcha/api/challenge?k=[" mypublickeyhere", "myprivatekeyhere", false]&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要求。“
那么为什么插件没有提供正确的挑战参数呢?也许我需要在某个地方传递一些东西 - 但是在哪里和哪里?再一次,一个简单的例子会很棒。
答案 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”错误的罪魁祸首。
我希望这些指导可以缩短您的开发时间。