LoginSignup
6

More than 1 year has passed since last update.

posted at

【Rails】deviseでログイン機能の実装

はじめに

deviseの導入手順について説明していきます。
deviseとはログイン機能を実装できるライブラリで、非常に便利です。deviseについてしらない人や、知っている人でも導入手順に自信がない人などの参考になればと思います。

deviseのインストール

まずはgemファイルにdeviseを追加しましょう。

Gemfile
gem 'devise'

忘れずににbundle installしておきます。

ターミナル
$ bundle install

その後deviseのインストールをします。

ターミナル
$ rails g devise:install

bundle installとdeviseのインストールが必要なので注意しましょう!
インストールを忘れて次に進むとマイグレーションに失敗し、少々面倒になります。
もしそうなった場合でも以下のリンクを参考に解決してください。
https://qiita.com/penguin_note/items/93b00c09c0da1f1a0eab

Userモデル、usersテーブルの作成

ターミナル
$ rails g devise user

このコマンドでマイグレーションファイルが作成され、devise用のルーティングが設定されます。

Usersテーブルに追加するカラムがある場合はこの段階でマイグレーションファイルに記述してマイグレーションさせておくと良いです。
(後から追加する場合は変更用のマイグレーションファイルを作成します)

xxxxxxxxxxxxxx.devise_create_users.rb
# マイグレーションファイル
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :name,               null: false # 追加
      t.string :email,              null: false, default: "" # デフォルトで記載あり
      t.string :encrypted_password, null: false, default: "" # デフォルトで記載あり
      t.integer :group,             null: false # 追加
      # (略)
  end
  # (略)
end

マイグレーションファイルの内容を確認したらマイグレーションさせておきます。

ターミナル
$ rails db:migrate

画面確認

Userモデルを作成したときにルーティングは勝手に設定されているので、ターミナルでrails routesと打って確認してみましょう。
4fd5db1d9457fffee84c8e4ea37b72c1.png
sessionsがログイン・ログアウトに関するもので、registrationsが新規登録・編集・削除に関するものぐらいに思っておけばOKです。

試しに新規登録画面を見てみます。
registrationsのnewが新規登録ページのアクションなので該当するURIを指定してアクセスします。
ローカルサーバーを立ち上げてブラウザからhttp://localhost:3000/users/sign_upにアクセスしてみましょう。
cf6002a56b4a9d508d8043dc2fb036d4.png
ちゃんと新規登録画面が表示されました。

ビューファイル

初期設定のままでは殺風景すぎるので、いろいろ装飾したいかと思います。
しかし、ビューファイルを探しても該当するものがありません。(たぶんどっかに隠れてる)
なので、ビューファイルを表示させる必要があります。これはターミナルで次のように入力するだけです。

ターミナル
$ rails g devise:views

これでapp/views/devise以下に各種ビューファイルが表示されます。
新規登録画面はapp/views/devise/registrations/new.html.erb、ログイン画面のビューはapp/views/devise/sessions/new.html.erbが対応しています。

その他

deviseを導入するといくつか便利なメソッドが使えるようになります。
とりあえず次の2つは覚えておいて良いかと思います。

user_signed_in?
ログイン状態かどうかを判定するメソッドです。ログインしていればtrue、していなければfalseを返します。
ifの条件にして、ログインしてなければログインページにリダイレクトさせるなどのように使えます。

current_user
ログインしているuserのactive recordを返します。
マイページのpathを指定するときなんかにcurrent_user.idとすれば、ログインしているuserのidを返してくれるので便利です。

最後に

これだけの操作で新規登録やログインなどの機能を実装できるのは便利すぎます。
deviseの導入は一つのアプリ製作で1回しかやらないので、手順を覚えておくことは難しいと思います。導入の際はこの記事を参考にしてもらえると幸いです。

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
What you can do with signing up
6