ENTRANCE

都内でエンジニアやってます。主にRubyとJavaを書いて遊んでる人のブログ。楽しくのんびりとがモットー。

【Ruby on Rails】Deviseで、ログイン機能を実装する





こんにちは、かっつんです!

今日は、gemのDeviseを使ったログイン機能の実装の仕方について紹介します。

Deviseを使えば、メールアドレスとパスワードによるユーザーのログイン、ログアウト機能が簡単に実装することができます!

また、オリジナルにカスタマイズすることもできますので、ドンドン使って行きましょう!!


さて、まずはDeviseの導入からです!

Deviseの導入

Gemfileに以下の記述を追記しましよう!

とりあえず導入するのであれば、最後の行に追記すれば問題ないです!

Gemfile

gem 'devise'


Gemfileに記述したら、bundle installを実行しましょう!

ターミナル(実行するプロジェクトのディレクトリ)

$ bundle install

これで、開発中のプロジェクトでDeviseが使えるようになりました!

設定ファイルの作成

次に、以下のコマンドを入力して、Deviseの設定ファイルを作成します!

ターミナル(実行するプロジェクトのディレクトリ)

$ rails g devise:install

このコマンドで、これらのファイルが生成されます!

  • config/initializers/devise.rb
  • config/locales/devise.en.yml

モデル・データベースの作成

次にユーザーのパスワードなどを管理するuserモデルを作成します!

ターミナル(実行するプロジェクトのディレクトリ)

$ rails g devise user
 (rails g devise モデル名)

このコマンドによって、

  • モデルファイル(app/models/user.rb)や
  • マイグレーションファイル(db/migrate/2019XXXXXXXXXX_devise_create_users.rb)
    などが作成されます。

では、作成されたマイグレーションファイルを実行して、テーブルを作りましょう!

ターミナル(実行するプロジェクトのディレクトリ)

$ rails db:migrate
# (まだDBを作っていない場合は、$ rails db:createしてから実行しましょう)

はい、以上で機能的な部分は実装することができています!
Deviseを使うとこれだけのステップで、実装することが出来てしまいます!

このままではログイン画面などのviewがないので、合わせて実装しましょう!

Viewファイルの作成

ターミナル(実行するプロジェクトのディレクトリ)

$ rails g devise:views

これでログイン関係のビューを一括で生成してくれます!(素晴らし〜)

ちなみに

  • サインアップ画面はapp/views/devise/registrations/new.html.erb
  • ログイン画面のビューはapp/views/devise/sessions/new.html.erb
    というビューファイルが対応しています。

このままじゃ味気ないので、適宜、HTMLやCSSで装飾してみてください!

ここまで順調に実装できれば、メールアドレスとパスワードを使ったログイン機能を実装出来ているはずです!

ヘルパーメソッド

user_signed_in?

deviseでログイン機能を実装すると、user_signed_in?というメソッドを使用することができます。

これは、ユーザーがサインインしているかどうか検証するメソッドです。

サインインしている場合にはtrueを返し、
サインインしていない場合にはfalseを返します。

faileName.html.erb

<% if user_signed_in? %>
  ユーザーがサインインしている時に表示する内容
<% end %>

もちろん、通常のif文と同様にelseを使うこともできます!

faileName.html.erb

<% if user_signed_in? %>
  ユーザーがサインインしている時に表示する内容
<% else %>
  ユーザーがサインアウトしている(サインインしてない)時に表示する内容
<% end %>

これを使うことで、ログイン・ログアウトボタンをログイン状態によって切り替えることができますね!