2015-01-10 19 views
9

Yeni recaptcha'yu PHP ile nasıl kullanacağınıza dair birkaç kılavuz gördüm, ancak hiçbiri Rails ile kullanılmadı.Rayları kullanarak reCAPTCHA nasıl doğrulanır?

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 

nasıl kadar doğru veya yanlış cevabı doğrulayabilir

<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: Bu defa var kodudur? Google’ın bu konuyla ilgili dokümantasyonu oldukça kafa karıştırıcı.

+0

@@ Ken Anderson Eğer yakut için ReCaptcha yardımcıları içine baktı ben mücevher kullanmamayı tercih ediyorum https://github.com/ambethia/recaptcha/ –

cevap

4

recaptcha gemine bakardım. Yeni API'yi desteklemeye yakın oldukları anlaşılıyor.

+1

uygulamalar. –

+2

@KenAnderson Kullanmıyor olsanız bile, kaynak koduna bakıp nasıl uyguladıklarını görebilirsiniz. – rdubya

+0

Kaynak koddan alabildiğim tek şey, bir "ifeme_recaptcha" satırı eklemekse de, görünüşe göre "verify_recaptcha", tanımlanmamış bir yöntemdir. En azından doğru yolda mıyım? –

2

HTTParty ile yapabilmeniz gerekir.

# 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 

Çok sevdiği denetleyicisi veya modelde kullanabilirsiniz:

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

Raylar recaptcha_verifier modelini oluşturmalı mı? –

+0

Sadece kopyala ve uygulamaya yapıştır/app/recaptcha_verifier.rb –

+0

Multi_xml kullanmıyorum. Gem hala işe yarayacak mı? –

2

Bu çok basit bir temel komut dosyasıdır. Böyle bir şey bekleyip beklemediğinizi bilmiyorum. Konsept'i bundan alabilir ve bunu kullanım durumunuza uyarlayabilirsiniz.

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

Sanırım bu benim modelimde olacaktı, değil mi? Peki kontrol cihazıma ne koyabilirim? –

+0

Herhangi bir şeyi gerçekten işlemeden önce captcha doğrulama işlemini başarısız olursa yeniden yönlendirmeyi bu denetleyicinizde bir before_filter kullanarak denetleyicinizde doğrulayabilirsiniz. Bu kodu bir modele almanıza gerek yok. –

+0

Denetleyicimi gönderdim. Kodunuzun hangi bölümü 'def oluşturmamda? Ve özellikle nerede? –

İlgili konular