如何使用rails验证reCAPTCHA?
如何使用rails验证reCAPTCHA?
我看到了一些关于如何在PHP中使用新的reCAPTCHA的指南,但是没有关于Rails的。这是我目前的代码:
<%= form_for @user, :url => users_path, :html => { :multipart => true } do |f| %> <%= f.text_field :name %> <%= f.submit "提交" %> <% end %>
users_controller.rb
class UsersController < ApplicationController def new @user = User.new end def create @user = User.new(user_params) if @user.save redirect_to users_success_path else flash[:notice] = "失败" redirect_to new_user_path end end
我该如何将响应验证为真或假?谷歌关于这个主题的文档非常令人困惑。
如何使用Rails验证reCAPTCHA?
问题的出现原因是我想要使用Rails验证reCAPTCHA,但我不知道该如何做。
解决方法是使用HTTParty gem。首先,在Gemfile文件中加入以下代码:
gem 'httparty'
然后运行bundle命令安装gem。
接下来,在app/models/recaptcha_verifier.rb文件中加入以下代码:
class RecaptchaVerifier def initialize(response, ip) @response = response @ip = ip end def self.verify(response, ip = nil) new(response, ip).verify end def verify recaptcha_response = HTTParty.get(recaptcha_url(@response, secret, @ip)) response_success?(recaptcha_response) end private def recaptcha_url(response, secret, ip) "https://www.google.com/recaptcha/api/siteverify?secret=#{secret}&response=#{response}&remoteip=#{ip}" end def secret # load your secret here or hardcode it end def response_success?(response) response.fetch('success') end end
然后,在控制器或模型中使用以下代码:
class SomeController def some_action if RecaptchaVerifier.verify(params[:user][:g-recaptcha-response]) # proceed else # output some flash warning and render same action or redirect_to :back end end end
如果遇到找不到`undefined_method`错误,可以尝试在recaptcha_verifier.rb文件的顶部添加`require 'httparty'`。
需要注意的是,不需要在application.js中引入httparty.js文件。如果想要进行JS验证,PHP和Ruby之间没有区别。
如何使用Rails验证reCAPTCHA?
问题的出现原因:用户在使用Rails框架时,想要验证reCAPTCHA,但是无法找到合适的方法来实现验证。
解决方法:查看recaptcha gem的源代码,了解其实现原理,并尝试使用该gem进行验证。
具体步骤如下:
1. 首先,查看recaptcha gem的官方网站:https://rubygems.org/gems/recaptcha,了解其功能和用法。
2. 阅读recaptcha gem的源代码,可以从中获取一些实现验证的思路。
3. 根据源代码中的提示,尝试在代码中添加if verify_recaptcha
语句进行验证。
4. 但是注意到verify_recaptcha
是一个未定义的方法,说明这个方法无法直接使用。
5. 为了找到解决方法,参考了这个commit:https://github.com/pangkalizer/recaptcha/commit/4d30e9fda34df11c275a38df0f5e3444d47c4871,其中的verify.rb文件可能对你有用。
通过以上步骤,你有可能找到验证reCAPTCHA的解决方法,希望对你有所帮助。
如何使用rails验证reCAPTCHA?
这是一个非常简单的基本脚本。我不知道你是否期望得到这样的东西。你可以从这个概念中得到启示,并在此基础上构建适应你自己的用例。
require 'uri' require 'net/http' uri = URI("http://www.google.com/recaptcha/api/verify") https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true verify_request = Net::HTTP::Post.new(uri.path) verify_request["secret"] = your_private_key verify_request["remoteip"] = request.remote_ip, #ip address of the user verify_request["challenge"] = params[:recaptcha_challenge_field], #recaptcha challenge field value verify_request["response"] = params[:recaptcha_response_field] # recaptcha response field value response = https.request(request) puts response #the response will be json and you could parse it check whether the captcha is correct or not.
我猜这个应该放在我的模型中,对吗?那么我在我的控制器中该放什么?
你可以在控制器中使用before_filter来进行验证码验证,在实际处理任何事情之前进行验证,如果验证码验证失败则重定向。不需要将此代码放到模型中。
我发布了我的控制器。你的代码中的哪一部分将放在我的`def create`中?具体放在哪里?
有两件事情。如果你打算在多个控制器中使用此验证码验证功能,那么最好将上述代码写为库中的一个模块,并将该模块包含在此控制器中。然后,在create方法的before_filter中,通过调用库中定义的函数来检查验证码,如果验证失败则重定向并返回。所有这些代码都将放在库函数中。
你能再清楚一点吗?我该如何调用这个函数?你所说的“库中的模块”是什么意思?
我还没有测试过这段代码。但你可以尝试一下。在你的rails应用程序的lib文件夹中创建一个名为'recaptcha_verify.rb'的文件。它的内容应该像这样fpaste.org/175709。然后像这样修改你的控制器fpaste.org/175723。可能会有一些问题,因为我还没有测试过。但这是它的结构应该是什么样子的。
等等,我需要安装一个Gem吗?
不需要。你不需要安装Gem。
因为我得到了一个路由错误“unitialized constant UsersController::RecaptchaVerify”。这是怎么回事?
阅读以下内容:1.stackoverflow.com/questions/619840/… 2.stackoverflow.com/questions/19098663/… 3.stackoverflow.com/questions/1073076