名前とパスワードだけで新規登録もログインもできるようdeviseをカスタマイズして利用したときの備忘録。
Railsは6.0.2
同じ実装をされている方もいたけどバージョンによって実装が変わるみたいでコピペしてやってもうまくいかなかった...
# <div class="field">
# <%= f.label :email %><br />
# <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
# </div>
# ↑を↓に修正
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
config/initializers/devise.rb
# config.authentication_keys = [:email]
# config.case_insensitive_keys = [:email]
# config.strip_whitespace_keys = [:email]
# ↑を↓に(下から数えて二つは変えなくてもいいかも。一応一緒に変えとく。)
config.authentication_keys = [:name]
config.case_insensitive_keys = [:name]
config.strip_whitespace_keys = [:name]
models/user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:authentication_keys => [:name] # 認証のキーをメールから名前へ
validates_uniqueness_of :name
validates_presence_of :name
# nameを利用してログイン
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["name = :value", { :value => name }]).first
else
where(conditions).first
end
end
def email_required?
false
end
def email_changed?
false
end
end
application_controller
# 以下追記
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name] )
end
完成。
①上記変更したのにまだundefined method `email'のエラーが出る場合
undefined method `email'
match ? attribute_missing(match, *args, &block) : super
ってエラーに悩まされてる場合、
自分が触っているviewが反映されていない可能性が。
deviseのビューを作成するときに
rails g devise:views users
で作っていたら、deviseはデフォルトだとapp/views/deviseのviewを探しにいってしまうので、
config/initializers/devise.rb
config.scoped_views = true
とする必要あり。
(そもそもadminとか他のユーザー機能つけないならrails g devise:viewsで作ったほうがいいかも。
削除して作り直したい場合は→rails destroy devise:views users)
②新規登録しようとするとUndefined method will_save_change_to_email?エラー
以下の記載を付け足す。
models/user.rb
def will_save_change_to_email?
false
end
参考記事
https://qiita.com/jagrament/items/f172b88861ac477621d1
https://github.com/heartcombo/devise#starting-with-rails