#目標
開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina
前提
下記実装済み。
ログイン機能を実装
1. アプリケーションを作成
ターミナル
$ rails new devise_name
2. トップ画面を作成
ターミナル
$ cd devise_name
ターミナル
$ rails g controller homes top
routes.rb
Rails.application.routes.draw do
root 'homes#top'
end
homes_controller.rb
class HomesController < ApplicationController
def top
end
end
top.html.slim
h1
| トップ画面
3. deviseを導入
Gemfile
gem 'devise'
ターミナル
$ bundle
ターミナル
$ rails g devise:install
ターミナル
$ rails g devise User name:string # モデル作成
ターミナル
$ rails db:migrate
ターミナル
$ rails g devise:controllers users # コントローラー作成
ターミナル
$ rails g devise:views users # ビュー作成
ターミナル
$ bundle exec erb2slim app/views app/views -d # ビューをslimに変換し、erbを削除
名前ログイン機能を実装
1. ルーティングの編集
routes.rb
Rails.application.routes.draw do
root 'homes#top'
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
end
devise_for :コントローラー名, controllers: { sessions: 'コントローラー名/sessions', registrations: 'コントローラー名/registrations' }
上記の様に記述する事でViewの変更が可能になる。
※ 「devise_for :users」
のままでは、既存のViewが表示されてしまい、Viewの編集が効かなくなる。
2. サインアップ画面に名前入力フォームを追記
users/registrations/new.html.slim
.field
= f.label :name
br
= f.text_field :name, autofocus: true, autocomplete: "name"
.field
= f.label :email
br
= f.email_field :email, autofocus: true, autocomplete: "email"
3. サインイン画面を編集
users/sessions/new.html.slim
/ メール入力フォームを削除し、名前入力フォームを追記
.field
= f.label :name
br
= f.text_field :name, autofocus: true, autocomplete: "name"
4. 「application_controller.rb」を編集
application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up,keys:[:email])
end
end
4. 「devise.rb」を編集
config/initializers/devise.rb
#43行目をコメントアウトして[:name]に変更
config.authentication_keys = [:name]
4. 「application.html.erb」を編集
application.html.slim
body
- if user_signed_in?
= link_to "ログアウト", destroy_user_session_path, method: :delete
- else
= link_to "新規登録", new_user_registration_path
= link_to "ログイン", new_user_session_path
= yield
※ サインアップ 、ログイン後はdeviseの初期設定で「root」(homes#top)に飛ぶ