LoginSignup
1
1

More than 3 years have passed since last update.

Railsのdeviseを使用して複数のログイン画面を実装する方法

Posted at

deviseとは

Railsのgem(ライブラリ)の1つ。
ログイン機能の実装を簡単にしてくれるgemです。
これからdeviseを使用して複数のログイン画面を実装していきます。

インストール・準備

Gemfileに追記

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/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

続いて2です。ルーティングを指定しましょう。

config/routes.rb
root to: "home#index"

続いて3です。こちらはログインした時にお知らせをしてくれます。

app/views/layouts/application.html.erb
<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/initializers/devise.rb
# config.scoped_views = false

上記のコメントアウトを外して、falseをtrueに書き換えます。

config/initializers/devise.rb
config.scoped_views = true

こうすることで複数モデルを可能にするようです。

Viewを生成する

rails g devise:views As(複数形)

rails g devise:views Bs(複数形)

ルーティングを生成する

config/routes.rbを以下のように書き換えてください。

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

1
1
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
1
1