はじめに
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. 新規登録画面を確認してみる
-
http://localhost:3000/users/sign_up にアクセスし以下の画面になれば正しく動作しています。
ビューを作成する
$ 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.rb
のconfig.scoped_views
のコメントアウトを外しtrue
に変更してください。
config/initializers/divise.rb
config.scoped_views = true
参考