前提条件
- 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.erb
とdevise/registrations/new.html.erb
とdevise/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に変えるだけ。