2015-01-10 4 views
9

私はPHPで新しいrecaptchaを使用する方法についてはいくつかのガイドを見てきましたが、Railsではそれを使用していません。reCAPTCHAをレールを使って確認する方法は?

<script src='https://www.google.com/recaptcha/api.js'></script> 

<%= form_for @user, :url => users_path, :html => { :multipart => true } do |f| %> 
    <%= f.text_field :name %> 
    <div class="g-recaptcha" data-sitekey="..."></div> 
    <%= f.submit "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] = "Failed" 
     redirect_to new_user_path 
    end 
    end 

どのように私は、真または偽の応答を確認することができます。これは私がこれまで持っているコードのですか?この件に関するGoogleのドキュメントは非常に混乱しています。

+0

@@ケン・アンダーソンは私は宝石を使用することを希望されないルビーのアプリhttps://github.com/ambethia/recaptcha/ –

答えて

4

私はrecaptcha宝石になります。彼らは新しいAPIのサポートに近いようです。

+1

ためにreCAPTCHAのヘルパーに見てきました。 –

+2

@KenAndersonもしあなたがそれを使っていなくても、ソースコードを見て、それがどのように実装されているか見ることができます。 – rdubya

+0

私がソースコードから収集できるのは、 'if verify_recaptcha'行を追加することだけでしたが、明らかに" verify_recaptcha "は未定義のメソッドです。私は正しい道を歩いていますか? –

2

あなたはHTTPartyで実行できるはずです。

# Gemfile 
gem 'httparty' 

bundle 

# 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 
+0

recaptcha_verifierモデルを 'rails generate'するべきですか? –

+0

それをコピーしてapp/models/recaptcha_verifier.rbに貼り付けてください。 –

+0

私はmulti_xmlを使用していません。宝石は今でも使えますか? –

2

は、これは非常に単純な基本的なスクリプトです。私はあなたがこのようなことを期待しているかどうかはわかりません。これをコンセプトにして、これを継承してユースケースに合わせることができます。

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. 
+0

これは私のモデルに入るだろうと思いますよね?それで私のコントローラーには何が置かれますか? –

+0

実際に処理する前にbefore_filterを使用してコントローラでこのcaptcha検証を実行し、captcha検証が失敗した場合にリダイレクトすることができます。このコードをモデルに取り込む必要はありません。 –

+0

私はコントローラを投稿しました。あなたのコードのどの部分が私の 'def create'に入りますか?と具体的にどこですか? –

関連する問題