13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】deviseを用いた名前ログイン機能の実装

Last updated at Posted at 2020-04-08

#目標

ezgif.com-video-to-gif.gif

開発環境

・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

前提

下記実装済み。

Slim導入

ログイン機能を実装

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)に飛ぶ

13
16
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
13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?