gem”devise”を使ってお手軽にログイン画面を実装する!【Rails】

はじめに

Railsアプリケーション作成において、ログイン機能をもたせるアプリというのは非常に多いと思います。

そんなログイン機能をお手軽に実装できるgem ”devise” を使ってみたので導入までの手順をまとめてみました。

なお、”rails s” までできた状態からのスタートとなります。そこまではサポートしていませんのでご了承ください。

手順

とりあえず”rails new”まで終えた状態からスタート

ここまではできる前提での記事なので省略します。

devise gem をインストール

gem 'devise'

Gemfileに追記して bundle install します。

bundle install

設定ファイルを準備

rails g devise:install

上記コマンドで設定ファイルが準備されます。

こんな説明文が表示されると思うのでこの通りやっていきます。

default_url_optionsの設定

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }	# 追記する

メーラーの設定らしいです。

今回は使わないので config/environments/development.rb にとりあえず書いておくだけで。

メールの設定に関してはこちらの記事が参考になるかも(別の方の記事に飛びます)。

root_pathの設定

rails g controller home index

今回はとりあえず”home_controller”ってのを用意して、indexアクションをroot_pathにしておきます。

root "home#index"

flashメッセージの表示場所を用意

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

application.html.erb の <%= yield %> の上にでも書いておけばよいでしょう。

Viewファイルの準備

rails g devise:views

以上のコマンドでViewファイルが生成されます。

デフォルトは味気ないので生成して自分でアレンジできるようにしておいたほうがいいと思います。

Userモデルを生成する

rails g devise User

↑のコマンドによってmigrationファイルが生成されるのでmigrateしましょう。

このへんは特別なことはしてないですね。

rails db:migrate

Userコントローラーを生成する

今回は “User” という名前のモデルを作ります。
(とはいえ基本 “User” でいいと思っている。ログイン部分だし。)

まずはコントローラーを次のコマンドで生成します。

rails g devise:controllers users

↑のコマンドを入力すると次のようにコメントされると思うので従いましょう。すなわち

devise_for :users, controllers: {
  sessions: 'users/sessions'
}

routes.rbに↑のように追記します。

routes.rbには先に入力した root と↑が書かれている状態になっていればOKです。

ちなみに先の手順のモデル生成より先にこっちやってしまうと(routes に↑を書いた状態で rails g devise User をしちゃうと)エラーになるので注意。

in block in load_missing_constant': uninitialized constant User (NameError)とかになる)


ログインしていない場合にログイン画面に飛ばすようにする

before_action :authenticate_user!

↑を対象とするコントローラーに貼り付けてやればOKです。

どのへんって?今回はhome controllerというのを作ってroot_pathにしているので、home_controllerに貼り付けてみましょう。すなわち

class HomeController < ApplicationController
  before_action :authenticate_user!
  
  def index
  end
  
end

home_controllerを↑のような状態にしておけばOKです。

こうしておくと、home_controllerのアクションに飛んできたものはすべてログイン状態でないとログイン画面に飛ばされる、という設定になります。

確認

どうなっているかhttp://localhost:3000/にアクセスしてみましょう。

もしundefined method devise_for' for #<ActionDispatch::Routing::~~~>みたいなエラーが出たら一度 rails s し直してください。それで解決するはずです。

次のような画面が表示されていれば無事成功です。

http://localhost:3000/、つまりroot_pathですから home_controller の indexアクション にアクセスしているはずなのですが、URLを見てみると http://localhost:3000/users/sign_in になっていると思います。

これは最後に設定した before_action :authenticate_user! というのが効いていて、ログインしていないので自動的にログイン画面にリダイレクトした、ということになります。

おわりに

以上、gem “devise” の導入までの手順をまとめました。

ログイン機能はほとんどのRailsアプリケーションに実装する機能だと思いますのでこの gem がさらっと導入できるようになるととても便利ですね。

参考サイト

参考 ログイン認証に便利!Ruby on Railsのdeviseの使い方【初心者向け】TECHACADEMY magazine 参考 Rails deviseによるユーザー認証 メールによる認証、emailとusernameのどちらでもログイン可能にするまでQiita

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください