rails メールアドレス ドメイン制限
ドメインを制限しよう!
①devise追加
②$ rails g devise:controllers users
③ルーティングを設定
④registrations_controller.rbに記入
Devise導入方法
Gemfileにdeviseを追加
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のルーティングを設定します。
devise_for :users, :controllers => {
:registrations => 'users/registrations'
}
本日の主役!
先ほど作ったDeviseのコントローラーに予めドメインを設定してあげてそのドメインと違っていればサインアップ画面に戻りメッセージがいくようにします
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を入力してあげると記入者が楽になります
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" ,:value => "@gmail.com"%>
</div>
Author And Source
この問題について(rails メールアドレス ドメイン制限), 我々は、より多くの情報をここで見つけました https://qiita.com/Onoshunn/items/b5837fa0aab4630f67b5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .