rails メールアドレス ドメイン制限


ドメインを制限しよう!

①devise追加

②$ rails g devise:controllers users

③ルーティングを設定

④registrations_controller.rbに記入

Devise導入方法

Gemfileにdeviseを追加

Gemfile
gem 'devise'

deviseインストール&Userモデルを生成

$ bundle Install
$ rails g devise:install
$ rails g devise User

DeviseControllerのカスタマイズ方法

認証ユーザーのモデルが User であれば、app/controllers/users ディレクトリ以下にファイル作成

$ rails g devise:controllers users

で app/controllers/users/の中に
- confirmations_controller.rb
- omniauth_callbacks_controller.rb
- passwords_controller.rb
- registrations_controller.rb
- sessions_controller.rb
- unlocks_controller.rb
が作成されます
今回ドメイン制限はregistrations_controller.rb
のファイルの中に設定してあげます

ルーティング設定

生成したDeviseControllerのルーティングを設定します。

routes.rb
devise_for :users, :controllers => {
 :registrations => 'users/registrations'
}

本日の主役!

先ほど作ったDeviseのコントローラーに予めドメインを設定してあげてそのドメインと違っていればサインアップ画面に戻りメッセージがいくようにします

registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

#省略
  # POST /resource
  def create
    mailRegex = /.*@gmail.com/
    email = params[:user][:email]
    if !email.match?(mailRegex)
      redirect_to new_user_registration_path
      flash[:notice] = 'ドメインはgmail.comのみ有効です'
      return
    end
    super
  end

#省略

mailRegexでドメインを制限して、!email.match?(mailRegex)で指定されたものと異なっていればredirect_toでまたSign_upの画面に戻るように設定します。そのときにflash[:notice]を利用し、ドメインが違っている人に対して優しいメッセージを送ってあげましょう。

補足

:valueの値に@gmail.comを入力してあげると記入者が楽になります

views/devise/new.html.erb
  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" ,:value => "@gmail.com"%>
  </div>