7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

reCAPTCHAをRailsに導入

Last updated at Posted at 2020-03-08

#reCAPTCHAについて
recaptchaとはボットなどによる悪質なアクセスからWebサイトを守るための機能です。
今回はRubyOnRails環境でreCAPTCHA V2を追加してみます。
(※最新はV3ですが、今回は馴染みのあるものと言う点と実装し易かったのでV2にしました。)

ログイン画面などでよく見るこんなのですね。
image.png
では、
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. インストール

Gemfile
 gem 'recaptcha'
 bundle install

#2. site_keyとsecret_keyの追加
以下のファイルを追加

config/initializers/recaptcha.rb
Recaptcha.configure do |config|
  config.site_key = ENV['RECAPTCHA_PUBLIC_KEY']
  config.secret_key = ENV['RECAPTCHA_PRIVATE_KEY']
end

#3. Deviseの登録画面に組み込む

app/views/devise/registrations/new.html.erb
  <%= recaptcha_tags %>

を、登録フォームの任意の場所に追加
hamlの場合
= recaptcha_tags
#4. Devise登録時にreCAPTCHAバリデーションを組み込む
こちらを参考にDeviseのRegistrationsControllerを継承したコントローラを追加し、createメソッドにreCAPTCHAバリデーションを組み込む

app/controllers/registrations_controller.rb
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対応
以下のファイルを追加

config/locales/ja.yml
  recaptcha: 
  errors: 
  verification_failed: 'reCAPTCHA認証に失敗しました。' 

細かい設定等はappによって異なるとは思いますが、私はこの流れでreCAPTCHAを導入致しました。
間違いや不動作等ありましたら申し訳ございません。
reCAPTCHAのGitHubを確認して下さい。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?