18
18

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でメールアドレスではなく、ユーザー名でログインできるようにする

Posted at

前提条件

  • deviseが既に導入済みである。
  • Rails 4.2.6
  • devise 4.3.0
  • Userモデルが存在する

はじめに

https://qiita.com/dayone80/items/ce04b21690f5f50a5cfa
https://qiita.com/HamaTech/items/8a4694fa40414aa029ea
これらの記事を参考に自分で実装しようとしたが、deviseのバージョンの違いで詰まったので記録しておく。

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

$ rails g migration add_username_to_users username:string:uniq

生成されたマイグレーションを実行。

$ rake db:migrate

application_controller.rbに追記

/controllers/application_controller.rb
  #以下を追加
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    #strong parametersを設定し、usernameを許可
    devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:username, :password, :password_confirmation) }
    devise_parameter_sanitizer.permit(:sign_in) { |u| u.permit(:username, :password, :password_confirmation) }
  end

user.rbに追記

/model/user.rb
  #以下を追加
  validates :username, presence: true, uniqueness: true, length: {maximum: 50}

  #登録時にメールアドレスを不要とする
  def email_required?
    false
  end

  def email_changed?
    false
  end

Viewファイルを書き換える

devise/registrations/edit.html.erbdevise/registrations/new.html.erbdevise/sessions/new.html.erb:email:usernameに変更。

設定ファイルを書き換える

/config/initializers/devise.rb

  config.authentication_keys = [:username]
  config.case_insensitive_keys = [:username]
  config.strip_whitespace_keys = [:username]

authentication_keysはコメントになっているのでコメントを外して:usernameを指定。
そのほかの2つは:emailを:usernameに変えるだけ。

18
18
1

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
18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?