(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で行いますよ
ここで実験
- devise.rb->email,apprication_controller->nameの場合
- devise.rb->email,apprication_controller->emailの場合
- devise.rb->name,apprication_controller->nameの場合
- devise.rb->name,apprication_controller->emailの場合
error
- 成功
- 登録時::name can't be blank,ログイン時::Unpermitted parameter: :name
- 登録時::Email can't be blank
- ログイン時::Unpermitted parameter: :name
実験からの考察
user認証をするときに値を取得するのはdevise.rbのほうで行い、 登録する時はdevise.rb,apprication_controller両方を用いる。
まとめ
email以外で認証する時は、devise.rbも変えよう!