我正在使用一个非常旧的rails应用程序(v1.2.6),需要在站点上实现验证码。有谁知道我可以采取什么方法来做到这一点?
我尝试过:
simple-captcha
插件(但仅适用于
rails> 3)非常感谢任何帮助。谢谢:))
答案 0 :(得分:1)
不需要使用插件,建议在可用时使用,但不是强制性的。 可能是"自己动手"安装需要更多步骤但绝对有效。 以reCAPTCHA documentation为例,有一个完整的部分专门解释没有插件的库的使用。
基本上有两种方法:
通过这些方式中的任何一种,取决于您的需求,希望您应该在许多方案中使用验证码而不会遇到麻烦。该API得到了很好的解释,并有一些例子。
希望这有帮助。
答案 1 :(得分:0)
所以我最终按照Javier的建议实施了reCaptcha Non-JavaScript API。
在我的视图:
中添加了以下内容<p class="text-black-11px-17px" style="color: red;"><%=flash[:captcha_error]%></p>
<script type="text/javascript"
src="http://www.google.com/recaptcha/api/challenge?k=PUBLIC_KEY_HERE"></script>
<noscript>
<iframe
src="http://www.google.com/recaptcha/api/noscript?k=PUBLIC_KEY_HERE"
height="300" width="500" frameborder="0"></iframe><br>
<textarea name="recaptcha_challenge_field" rows="3" cols="40">
</textarea>
<input type="hidden" name="recaptcha_response_field"
value="manual_challenge">
</noscript>
在我的控制器中添加了以下内容:
# verify reCaptcha
uri = URI.parse("http://www.google.com/recaptcha/api/verify")
response = Net::HTTP.post_form(uri, {
"privatekey" => "PRIVATE_KEY_HERE",
"remoteip" => request.env['REMOTE_ADDR'],
"challenge" => params[:recaptcha_challenge_field],
"response" => params[:recaptcha_response_field]
})
flash[:captcha_error] = nil
if ((@contact.valid?) && (response.body.include? "success"))
# VALIDATION SUCCESSFUL - SEND THE EMAIL
elsif (response.body.include? "false")
flash[:captcha_error] = "The CAPTCHA you entered is invalid. Please try again."
render :action => 'contact'
else
render :action => 'contact'
end