deviseとは
Railsのgem(ライブラリ)の1つ。
ログイン機能の実装を簡単にしてくれるgemです。
これからdeviseを使用して複数のログイン画面を実装していきます。
インストール・準備
Gemfileに追記
gem 'devise'
bundleまたはbundle install実行
$ bundle install
deviseを使用できるようにインストールします。
$ rails g devise:install
上記のコマンドを実行すると、ターミナルに下記の文字が表示されます。
===============================================================================
Depending on your application's configuration some manual setup may be required:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
===============================================================================
では1から順に見ていきましょう!
config/environments/development.rbのendの上に記述してください。
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
続いて2です。ルーティングを指定しましょう。
root to: "home#index"
続いて3です。こちらはログインした時にお知らせをしてくれます。
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
ここで一つ注意なのですが、複数のログイン画面を実装するときは4は実行しないようにしましょう。
Modelを生成する
ここで2つのモデルを生成します。
モデルを生成するときは$ rails g devise モデル名
です。
$ rails g devise A
$ rails g devise B
db/migrateに2つのファイルが生成されます。
設定を加えたい場合は今のうちに書き換えておきましょう。
そして $ rails db:migrate
をお忘れなく!
Controllerを生成する
$ rails g devise:controllers As(複数形)
$ rails g devise:controllers Bs(複数形)
複数形にするのをお忘れなく!
設定ファイルを変更する
config/initializers/development.rbを開いて下記を見つけ出す。Macの方はコマンド⌘ + Fで簡単に探せますよ!
# config.scoped_views = false
上記のコメントアウトを外して、falseをtrueに書き換えます。
config.scoped_views = true
こうすることで複数モデルを可能にするようです。
Viewを生成する
rails g devise:views As(複数形)
rails g devise:views Bs(複数形)
ルーティングを生成する
config/routes.rbを以下のように書き換えてください。
Rails.application.routes.draw do
devise_for :B, controllers: {
sessions: "Bs/sessions",
passwords: "Bs/passwords",
registrations: "Bs/registrations",
}
devise_for :As, controllers: {
sessions: "As/sessions",
passwords: "As/passwords",
registrations: "As/registrations",
}
root to: "home#index"
end
その他
それぞれの新規登録画面・ログイン画面を編集したい場合は、
[Aの新規登録画面]
app/views/As/registrations/new.html.rb
[Aのログイン画面]
app/views/As/sessions/new.html.rb
[Bの新規登録画面]
app/views/Bs/registrations/new.html.rb
[Bのログイン画面]
app/views/Bs/sessions/new.html.rb
rails routes
でを見たらURLの指定もわかりやすいかと思います。
rails sでサーバーを起動して以下のようにURLを打ち込んで確認してください。
[Aの新規登録画面]
http://localhost:3000/As/sign_up
[Aのログイン画面]
http://localhost:3000/As/sign_in
[Bの新規登録画面]
http://localhost:3000/Bs/sign_up
[Bのログイン画面]
http://localhost:3000/Bs/sign_in
参照
https://qiita.com/4npei/items/9066afb75d6a2ad9c661
https://qiita.com/Densetsu/items/2dc6a010809ae70c079e