deviseでユーザー名からログインできるようにする
はじめに
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の項目を追記したら完了です。
参考サイト
Author And Source
この問題について(deviseでユーザー名からログインできるようにする), 我々は、より多くの情報をここで見つけました https://qiita.com/cocoa-engineer/items/cfa31b0a81489c9ced83著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .