devise導入ステップ
1.Gemfileでインストール
2.deviseをインストール
3.ユーザーテーブルを作成
かんたん3ステップで解説していきます
開発環境
ruby 2.6.3
Rails 5.2.6
deviseとは
Twitterやメルカリのようにユーザー機能を実装したいときに、1から実装しようとするとセキュリティ面等で実装がかなり、難しくなります。
そこで簡単にユーザー機能を作ることができるのが「devise」というGemです。
1.Gemfileでインストール
Gemfileの1番下に
gem 'devise'
Gemfileをインストールします
ターミナルで
$ bundle install
または
$ bundle
ターミナルにBundle complete!の文字があれば成功!
Bundle complete! 19 Gemfile dependencies, 83 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
deviseをインストール
deviseをインストールします
ターミナルで下記コマンド入力
$ rails g devise:install
一見エラー文っぽいですが、下記内容が表示されればインストール成功です
Running via Spring preloader in process 7494
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
Depending on your application's configuration some manual setup may be required:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
=========================================================
作業は特に必要ないですが、一応メッセージをみていきましょう!
1は新規登録時にメール送るときの設定なので、ここでは割愛
2はroot to: "home#index"
なので、つまりroutes.rb
でroot to:
になにか定義してね。という意味です。(URLが/
のときのルーティング)
3はdeviseはデフォルトでフラッシュメッセージを表示できるので、使うならapp/views/layouts/application.html.erb.
にコード書いてねーという意味ですね。
別に書かなくても問題はないですが、書くならapplication.html.erb
のbodyタグ
の<%= yield %>
の上が一般的ですかね
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
4はviewをカスタマイズするならrails g devise:views
してねという意味です
ここまでで、deviseを使う準備ができました
ユーザーテーブルを作成
deviseのを使うとユーザーのテーブル作成が、コマンド1つ
で行えます!
rails g devise モデル名
でテーブルができます
ターミナルで下記実行
$ rails g devise User
作成されたマイグレーションファイルを確認してみましょう
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
ユーザー機能に必要なテーブルが作成されました。
ただし、ここで注意する点があります。
それは、deviseのデフォルトのテーブルでは、名前を保存するカラムがありません。
なので、カラムを追加する必要があります。
マイグレーションファイルにt.string :name
を追加しましょう
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.string :name
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
カラムが追加できたら、データベースへマイグレーションします
$ rails db:migrate
ここまでで、deviseのインストールからdeviseを使ったユーザーモデルの作成までできました
実際にログイン機能を作ってみよう
次回から今回作成した、deviseの機能を使って実際にログイン機能を使っていきましょう!
このリンクから飛べます