gemで提供されているライブラリのdeviseを使用して、ログイン機能などを作成する
deviseのインストール
devise | RubyGems.org | your community gem host
公式サイトからバージョンも指定したものを持ってくると、バージョン依存が起きにくくなります。
gemfileに記述
gem ‘devise’, ‘~> 4.2’
※ >= x.x.x(x.x.x以上のバージョンが必要)
※ ~> x.0(x.1からx.9は良いが、メインのバージョンがあがるとは不可。例えば、3.2は良いが、4.0は不可など)
`gem ‘devise’`だけだと常に最新のバージョンがインストールされる。
bundle installを実行
次にdeviseを利用するための初期作業を行います。
rails g devise:install
Running via Spring preloader in process 14650
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
Some setup you must do manually if you haven’t yet:
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.
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: “home#index”
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<%= notice %>
<%= alert %>
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
===============================================================================
この画面が出て来たら成功です。
次にユーザー情報を保存するモデルを作成します。
普通にモデルを作成する際に利用するrails g model model名とは異なり、devise独自のルールになるので注意が必要です。
rails g devise User
Running via Spring preloader in process 14679
invoke active_record
create db/migrate/20181108040718_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
-
ここまでで、
- ユーザー情報を操作するUserという名前のモデル
- ユーザー情報を保存するためのuserテーブルを作成するマイグレーションファイル
が作成されました。
rake db:migrate
-
未実行のマイグレーションファイルを実行
- rake db:migrateを実行
- schema_migrationsテーブルを調べ、存在しなければ作成
- db/migrateディレクトリ内のすべてのマイグレーションファイルを調べる
- データベースの現在のバージョンと異なるバージョンがあった場合、データベースに適応
- schema_migrationsテーブルの更新
== 20181108040718 DeviseCreateUsers: migrating ================================
— create_table(:users)
-> 0.0065s
— add_index(:users, :email, {:unique=>true})
-> 0.0014s
— add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0014s
== 20181108040718 DeviseCreateUsers: migrated (0.0096s) =======================
マイグレーションファイルとは?
マイグレーションファイルは、テーブルの設計図です。
このファイルに記載されている内容でテーブルの列、名前(テーブル名、カラム名)が決まります。
テーブル名はモデル名の複数形となります。このように、Railsでは命名規則が厳密に決められています。
モデルの命名規則
Railsでは、ファイルやテーブルなどの命名を規則に従った形にする必要があります。モデルとテーブルに関する命名規則は以下のようになっており、これに従えばテーブルとモデルが結びつきます。
モデル名 | 先頭大文字、単数形 |
---|---|
モデルのファイル名 | 先頭小文字、単数形 |
テーブル名 | 先頭小文字、複数形 |
deviseの設定の確認
routes.rbに自動でルーティングが追加されます。
deviseを使用する際にURLとしてusersを含みます
Rails.application.routes.draw do
devise_for :users
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
models/user.rbには作成したUserモデルにdeviseで使用する機能が記述されている。
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end
ここまでで、rake routesを実行するとユーザー登録(sign_in)やログイン画面(sign_up)が作成されていることが確認できます。
ログイン画面のviewを作成
deviseと関連づけられたビューを作成します。
rails g devise:views
Running via Spring preloader in process 14832
invoke Devise::Generators::SharedViewsGenerator
create app/views/devise/shared
create app/views/devise/shared/_links.html.erb
invoke form_for
create app/views/devise/confirmations
create app/views/devise/confirmations/new.html.erb
create app/views/devise/passwords
create app/views/devise/passwords/edit.html.erb
create app/views/devise/passwords/new.html.erb
create app/views/devise/registrations
create app/views/devise/registrations/edit.html.erb
create app/views/devise/registrations/new.html.erb
create app/views/devise/sessions
create app/views/devise/sessions/new.html.erb
create app/views/devise/unlocks
create app/views/devise/unlocks/new.html.erb
invoke erb
create app/views/devise/mailer
create app/views/devise/mailer/confirmation_instructions.html.erb
create app/views/devise/mailer/email_changed.html.erb
create app/views/devise/mailer/password_change.html.erb
create app/views/devise/mailer/reset_password_instructions.html.erb
create app/views/devise/mailer/unlock_instructions.html.erb
ログイン機能と関連付けされたビューや確認画面などのビューが作成されました。
views/devise/registrations/new.html.erbにはデフォルトで下記のフォームが作成されていますので、デザインの変更をしたい場合には下記を変更していきます。
Sign up
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
<% if @minimum_password_length %>
(<%= @minimum_password_length %> characters minimum)
<% end %>
<%= f.password_field :password, autocomplete: "new-password" %>
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
<% end %>
<%= render "devise/shared/links" %>