(Rails) deviselogin出来ないときの対処法(devise)

状況

sign upはできるがloginができない。

(Sign upはname,email,passwordで登録し、Log in時はname,passwordで認証する。)

原因

ストロングパラメーターは設定していたが、/config/initializers/devise.rbのほうを変えていなかった

apprication_controller

before_action :configure_permitted_parameters, if: :devise_controller?
private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])#変更前
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email])#変更後
  end

devise.rb

config.authentication_keys = [:email]#変更前
config.authentication_keys = [:name]#変更後

詳細

emailとnameの指定が逆だった。

意味としては、apprication_controllerでsign up時にemail登録を許可し、devise.rbでuser認証時のチェックをnameで行いますよ

ここで実験

  1. devise.rb->email,apprication_controller->nameの場合
  2. devise.rb->email,apprication_controller->emailの場合
  3. devise.rb->name,apprication_controller->nameの場合
  4. devise.rb->name,apprication_controller->emailの場合

error

  1. 成功
  2. 登録時::name can't be blank,ログイン時::Unpermitted parameter: :name
  3. 登録時::Email can't be blank
  4. ログイン時::Unpermitted parameter: :name

実験からの考察

user認証をするときに値を取得するのはdevise.rbのほうで行い、 登録する時はdevise.rb,apprication_controller両方を用いる。

まとめ

email以外で認証する時は、devise.rbも変えよう!