LoginSignup
9
12

More than 1 year has passed since last update.

【Rails】deviseの導入手順

Last updated at Posted at 2021-12-08

はじめに

Railsでログイン等の認証機能をdeviseで実装する機会があったので手順をまとめておく。

deviseとは

以下のような認証機能を簡単に実装することができるgem

  • ユーザー登録
  • ログイン
  • ログアウト
  • 登録情報の編集
  • パスワード変更、再発行

導入手順

1. Gemfileに以下を追記する

Gemfile
gem 'devise'

2. deviseの設定ファイルを作成する

$ rails g devise:install

コマンドを実行することで以下二つの設定ファイルが作成されます。

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

3. モデルを作成する

  • 認証機能を付与したいモデルを作成する
  • generationの後はmodelではなくdeviseとすることに注意する
$ rails g devise User
  • 以下のようにmigrationファイルやモデルクラスファイルが作成されます。
      invoke  active_record
      create    db/migrate/20211206135237_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

3-1. Userモデルを確認してみる

デフォルトでは6つのモジュールが用意されており、パスワードの検証や、トークンの生成、ログイン回数のカウント等を行ってくれます。

app/models/user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end

※ こちらの記事に詳しく書かれております。

4. migrationファイルをDBに反映する

$ rails db:migrate

4-1. 新しく作成されたカラムを確認してみる

1. Docker上のMySQLコンテナに接続しログインする

$ docker-compose exec db bash
root@....:/# mysql -u user -p

2. コマンドでusersカラムを確認する

mysql>show databases; # データベースの確認
mysql>show tables from <データベース名>; # テーブルの確認
mysql>show columns from <テーブル名(今回はusers)> from <データベース名>; # カラムの確認
+------------------------+--------------+------+-----+---------+----------------+
| Field                  | Type         | Null | Key | Default | Extra          |
+------------------------+--------------+------+-----+---------+----------------+
| id                     | bigint       | NO   | PRI | NULL    | auto_increment |
| email                  | varchar(255) | NO   | UNI |         |                |
| encrypted_password     | varchar(255) | NO   |     |         |                |
| reset_password_token   | varchar(255) | YES  | UNI | NULL    |                |
| reset_password_sent_at | datetime     | YES  |     | NULL    |                |
| remember_created_at    | datetime     | YES  |     | NULL    |                |
| created_at             | datetime(6)  | NO   |     | NULL    |                |
| updated_at             | datetime(6)  | NO   |     | NULL    |                |
+------------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.12 sec)

5. 新規登録画面を確認してみる

ビューを作成する

$ rails generate devise:views users

ログをみるとviewに関する色々なファイルが作成されていることがわかります。
カスタマイズする際は以下のファイルを編集します。

  • 新規登録画面: app/views/devise/registrations/new.html.erb
  • ログイン画面: app/views/devise/sessions/new.html.erb

以上が簡単な流れになります。

※ 編集したViewが反映されない場合

手順2 で作成されたconfig/initializers/devise.rbconfig.scoped_viewsのコメントアウトを外しtrueに変更してください。

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

参考

9
12
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
9
12