#reCAPTCHAについて
recaptchaとはボットなどによる悪質なアクセスからWebサイトを守るための機能です。
今回はRubyOnRails環境でreCAPTCHA V2を追加してみます。
(※最新はV3ですが、今回は馴染みのあるものと言う点と実装し易かったのでV2にしました。)
ログイン画面などでよく見るこんなのですね。
では、
GooglereCAPTCHAからGoogleアカウントで登録していきましょう。
1. Adomin consoleボタンをクリック。
2. ➕ ボタンをクリック。
3. ラベルにapp名など入力。
4. reCAPTCHA タイプ選択。(今回はV2)
5. ドメイン登録。appのドメイン、IPアドレス等、使用したいものを登録。(開発でも使う場合はlocalhostも登録。)
( ➕ ボタンで追加、 ✖️ ボタンで削除)
6. オーナー登録。使用者のメールアドレス入力。複数可共同開発者なども登録。
7. チェックボックスにチェック。
- [×]reCAPTCHA 利用条件に同意する。 必須
- [×]アラートをオーナーに送信する。 任意
8. 送信ボタンを押して登録完了。
これで登録完了です。
歯車マークを押し設定にいき、 reCAPTCHA のキー をクリック。
すると、 site_key と secret_key と登録情報等が確認出来るようになってます。
続きまして、
Railsに組み込んで行きましょう。
#1. インストール
gem 'recaptcha'
bundle install
#2. site_keyとsecret_keyの追加
以下のファイルを追加
Recaptcha.configure do |config|
config.site_key = ENV['RECAPTCHA_PUBLIC_KEY']
config.secret_key = ENV['RECAPTCHA_PRIVATE_KEY']
end
#3. Deviseの登録画面に組み込む
<%= recaptcha_tags %>
を、登録フォームの任意の場所に追加
hamlの場合
= recaptcha_tags
#4. Devise登録時にreCAPTCHAバリデーションを組み込む
こちらを参考にDeviseのRegistrationsControllerを継承したコントローラを追加し、createメソッドにreCAPTCHAバリデーションを組み込む
class RegistrationsController < Devise::RegistrationsController
prepend_before_action :check_captcha, only: [:create]
prepend_before_action :customize_sign_up_params, only: [:create]
private
def customize_sign_up_params
devise_parameter_sanitizer.permit :sign_up, keys: [:username, :email, :password, :password_confirmation, :remember_me]
end
def check_captcha
self.resource = resource_class.new sign_up_params
resource.validate
unless verify_recaptcha(model: resource)
respond_with_navigational(resource) { render :new }
end
end
end
#5. reCAPTCHAのエラーメッセージのi18n対応
以下のファイルを追加
recaptcha:
errors:
verification_failed: 'reCAPTCHA認証に失敗しました。'
細かい設定等はappによって異なるとは思いますが、私はこの流れでreCAPTCHAを導入致しました。
間違いや不動作等ありましたら申し訳ございません。
reCAPTCHAのGitHubを確認して下さい。