3
1

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 5 years have passed since last update.

deviseでユーザー名からログインできるようにする

3
Last updated at Posted at 2019-09-12

はじめに

deviseはデフォルトでemailとpasswordで新規登録、ログインする仕様になっているため、ユーザー名から登録、ログインできるようにする方法について投稿します。

deviseとは

ユーザーの新規登録、ログイン、ログアウトなど、認証に必要な機能を追加することができるgemです。

deviseの導入方法について

【参照】
https://qiita.com/cocoa-engineer/items/625da569fcac1ad2db1f

Userモデルにusernameカラムを追加する

まず、マイグレーションファイルを作成します。
※Userモデルの作成は、上記「deviseの導入方法について」参照。

$ rails g migration add_username_to_users username:string

作成されたマイグレーションファイルを実行する。

$ rails db:migrate

Strong Parameterの設定

usernameを登録できるように、application_controller.rbにStrong Parameterを設定します。

application_controller.rb
class ApplicationController < ActionController::Base
 before_action :configure_permitted_parameters, if: :devise_controller?

 protected

 def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
   devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
   devise_parameter_sanitizer.permit(:account_update, keys: [:username])
 end
end

登録時にemailを不要にする

登録時にemailを不要にしたい場合、user.rbに以下を追記します。

user.rb
class User < ApplicationRecord
 #usernameを必須・一意とする
 validates :username,uniqueness: true
 devise :database_authenticatable, :registerable,
        :recoverable, :rememberable, :trackable, :validatable

 #登録時にemailを不要にする
 def email_required?
   false
 end

 def email_changed?
   false
 end
end

devise設定ファイルの編集

devise.rbに以下を追記します。

devise.rb
config.authentication_keys = [:username]

Viewの変更

Viewにusernameの項目を追記します。

views/registrations/new.html.erb
<h2>Sign up</h2>
    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
     <%= devise_error_messages! %>
         <div><%= f.label :username %><br />
             <%= f.text_field :username %></div>

         <div><%= f.label :password %><br />
             <%= f.password_field :password %></div>

         <div><%= f.label :password_confirmation %><br />
             <%= f.password_field :password_confirmation %></div>

         <div><%= f.submit "Sign up" %></div>
    <% end %>

edit.html.erbについても同様に、usernameの項目を追記したら完了です。

参考サイト

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?