RailsアプリにGoogleの新しいrecaptchaの実用的な例がありますか?私が従おうとするすべてのガイドは不明確または不完全であり、別の方法を使用しているようです。
手巻きコードが望ましいでしょう。
作業中:
config/environments/production.rb:
#...
recaptcha_public_key= "[PUBLIC KEY]"
recaptcha_private_key= "[PRIVATE KEY]"
end
config/environments/development.rb:
#...
recaptcha_public_key= "[PUBLIC KEY]"
recaptcha_private_key= "[PRIVATE KEY]"
end
config/initializers/recaptcha.rb
Recaptcha.configure do |config|
config.public_key = Rails.application.secrets.recaptcha_public_key
config.private_key = Rails.application.secrets.recaptcha_secret_key
config.api_version = 'v2'
end
recaptcha gem を使用して、チェックボックスメソッドを使用する例を作成しました。
ここで利用可能なコード: https://github.com/sunnyrjuneja/recaptcha_example
コミットは非常に簡単に追跡できるはずです。他にご不明な点がありましたらお知らせください。
ここにアプリケーションの例: https://recaptcha-checkbox.herokuapp.com/
更新:
Secrets.ymlを使わずにこれを行う方法を次に示します。
イニシャライザを次のように変更します。
Recaptcha.configure do |config|
config.public_key = ENV['RECAPTCHA_PUBLIC_KEY']
config.private_key = ENV['RECAPTCHA_PRIVATE_KEY']
end
開発環境または本番環境で、これを.bashrcまたは.zshrcに追加します。
export RECAPTCHA_PUBLIC_KEY="YOURPUBLICKEY"
export RECAPTCHA_PRIVATE_KEY="YOURPRIVATEKEY"
Herokuを使用してデプロイしている場合は、コマンドラインで次のようにします。
heroku config:set RECAPTCHA_PUBLIC_KEY="YOURPUBLICKEY"
heroku config:set RECAPTCHA_PRIVATE_KEY="YOURPRIVATEKEY"
更新2:
Recaptcha gemは、キーの設定に異なるメソッド名を使用するようになりました。
Recaptcha.configure do |config| config.site_key = 'YOUR_SITE_KEY_HERE' config.secret_key = 'YOUR_SECRET_KEY_HERE' # Uncomment the following line if you are using a proxy server: # config.proxy = 'http://myproxy.com.au:8080' end
これに従ってください:
ステップ1. Ruby on Rails application:-
a)ターミナルを開き、アプリケーションを作成する権限があるディレクトリに移動して、次のように入力します。Rails new recap
b)アプリケーションを作成したら、そのフォルダーに切り替えます。
$cd recap
c)バンドルインストールを入力して実行します。
$bundle install
ステップ2.モデル、ビュー、コントローラーを作成します:-
ステップ3. Google RecaptchaとRuby on Rails:-を統合する
a)アクセスを取得するためにurドメインを登録するには、Google Recaptcha Webサイトにログインしてください。( https://www.google.com/recaptcha/intro/index.html )
b)ログインしてサイトに登録し、詳細を記入してくださいc)登録後、googleに
スクリプトタグは、このスニペットをHTMLテンプレートの終了タグの前に配置します。 divは、reCAPTCHAウィジェットを表示する場所の最後にこのスニペットを配置します。
d)上記の手順が完了すると、サイトに回収が表示されます。
f)サーバー側の検証では、コントローラーのフォーム送信アクションにパラメーターとして送信される秘密鍵と応答を使用できます。
g)Googleがそのユーザーを確認したかどうかを確認するには、次のパラメーターを使用してGETリクエストを送信します。URL: https://www.google.com/recaptcha/api/siteverify
手順4.サーバー側検証のためのアプリケーションコードの変更。
詳細については、以下のリンクを参照してください。
レイアウト:
<script src='https://www.google.com/recaptcha/api.js'></script>
私のビューapp/views/users/_form.html.erb:
<div class="g-recaptcha" data-sitekey="6LdgWwETAAAAAPwAddRqDtNbt9sdfsfsfsdJhggghhKKYTdadsHt54"></div>
初期化子では:
SECRET_KEY = "my_secret_key_here"
ユーザーコントローラー:
def verify_google_recptcha(secret_key,response)
status = `curl "https://www.google.com/recaptcha/api/siteverify?secret=#{secret_key}&response=#{response}"`
logger.info "---------------status ==> #{status}"
hash = JSON.parse(status)
hash["success"] == true ? true : false
end
def create
@user = User.new(user_params)
status = verify_google_recptcha(SECRET_KEY,params["g-recaptcha-response"])
respond_to do |format|
if @user.save && status
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
logger.info "---------------status ==> #{status}" will print like below
エラー:
---------------status ==> {
"success": false,
"error-codes": [
"missing-input-response"
]
}
成功した
---------------status ==> {
"success": true
}
その中であなたは取ることができますstatus["error-codes"][0]
そして_form.html.erb
私のアプリケーションを herok で参照してください
この例は RailsCarmaのブログ から試す必要があります。
次の手順に従います。1)資格情報を取得します。2)recaptchaタグを追加します。3)検証を処理するには、recaptchaクラスを作成します。4)登録コントローラーで、verify_recaptchaメソッドを追加します。
セットアップ手順1:-
以下をgemファイルに追加します。
gem “recaptcha”, :require => “recaptcha/Rails”
ステップ2:-
Developers.google.comにログインしてGmailアカウントにログインし、「recaptcha」を検索します。 「APIキーのサインアップ」リンクをクリックします。シークレットキーとサイトキーを確認します。名前自体が示すように、秘密鍵はより安全な場所に保管する必要がありますが、サイト鍵はGoogleへの認証に使用される公開鍵です。アプリケーションで後で使用する公開鍵と秘密鍵を取得するには、サイト名をGoogleアカウントに登録します。
登録が完了すると、公開鍵と秘密鍵を取得します。クライアント側から、公開鍵がrecaptchaサービスに送信され、新しいキャプチャを要求します。秘密鍵はサーバー側で適用され、正しい値が入力されているかどうかを確認します。
次に、reCAPTCHA APIキーを登録し、それを環境設定ファイルに追加します。
#put this in development.rb and in production.rb
ENV_RECAPTCHA_PUBLIC_KEY= ‘your-public-key’
ENV_RECAPTCHA_PRIVATE_KEY= ‘your-private-key’
ステップ3:-
Create a file named recaptcha.rb in config/initializers to configure recaptcha parameters.
Recaptcha.configure do |config|
config.public_key = ‘ ENV_RECAPTCHA_PUBLIC_KEY’
config.private_key = ‘ENV_RECAPTCHA_PRIVATE_KEY’
config.proxy = ‘http://www.google.com/recaptcha/api/verify’
end
ステップ4:-表示
Captcha Gemは、実際のキャプチャボックスをレンダリングするのに役立ちます。キャプチャを表示したい場所で次のように表示するだけで簡単です。
<%= raw recaptcha_tags %>
If you are using SSL, use this instead:
<%= recaptcha_tags :ssl => true %>, The SSL option ensures we send a https request to the recaptcha service.
ステップ5:-コントローラー
Captcha Gemは、提出が正しいかどうかを確認するためにreCaptcha APIサーバーに投稿する別のヘルパーメソッドを提供します。そうである場合、メソッドはtrueを返し、そうでない場合、recaptchaがモデルインスタンスに間違っているというカスタムエラーメッセージを追加します。コントローラの作成アクションで使用できる基本的なコードは次のとおりです:-
Deviseコントローラーで、app/controllers/registrations_controller.rbに次のコードを挿入します。
require ‘recaptcha.rb’
before_action :verify_recaptcha, only: [:create]
def verify_recaptcha
response = Recaptcha.verify(params)
session[:sign_up] = params[:user].except(:password, :password_confirmation, :remoteip)
if response.code == 200
if response[‘success’]
flash[:notice] = “Recaptcha verification successful.”
else
redirect_to new_user_registration_path(user: params[:user]),
alert: “Recaptcha verification error.”
end
else
redirect_to new_user_registration_path(user: params[:user]),
alert: “HTTP connection error.”
end
end
検証が失敗した場合にサインアップフォームに事前入力できるため、セッション[:sign_up]は永続化されます。