deviseでユーザログイン機能を実装

以下を参考にさせていただきました。

Railsのログイン認証gemのDeviseのインストール方法 - Rails Webook

deviseの導入

Gemfileにデバイスを追加してgemをインストールします。

# Gemfile
gem 'devise'
$ bundle install

次にデバイスの設定ファイルたちをインストールします。

$ rails g devise:install

ここから初期設定のガイダンスに従って5つの設定を行っていきます。

  1. 以下のようにメール設定用の設定を追加。
# config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }
  1. root_urlを設定

ログアウト時のリダイレクト先にroot_urlを使っているので、ここでroot_urlが設定されてないといけないとのこと。

僕はhome#indexをルートにした。

  1. アラート部分を作っておく

これはマストなのかわからないけど、ログイン時にログインしました、とかログアウトしました、みたいな。

application.html.erbのヘッダーにあたるとことかに書いとけばいいと思われ!

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

これで初期設定はおわり!簡単!

Userモデル作成

ということでここからdeviseを使ったモデルを作成していきます。

$ rails g devise User

そしてdbのマイグレーションファイルを必要に応じていじります。他にも必要なカラムがあれば追加。

次にログインのボタン等を実装します。以下は自分がslimで書いた例です。

doctype html
html
  head
    title TITLE
    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
    = javascript_include_tag 'application', 'data-turbolinks-track' => true
    = csrf_meta_tags

  body
    h1: a href="/" Sugukari
    header
      nav
        - if user_signed_in?
          Login user:
          strong
            = current_user.email
          br
          = link_to 'プロフィール変更', edit_user_registration_path
          span> |
          = link_to "ログアウト", destroy_user_session_path, method: :delete
        - else 
          = link_to "サインイン", new_user_registration_path
          span> |
          = link_to "ログイン", new_user_session_path

    / User Login Notification
    p class="notice" = notice
    p class="alert" = alert

= yield

これで完成です!ユーザ系の一通りの機能が使えます。

めっちゃ簡単...!!