はじめに
vue.js + Ruby on Rails(apiモード)でユーザ登録機能を作成中に、以下のエラーが発生。
Processing by DeviseTokenAuth::RegistrationsController#create as HTML
Parameters: {"name"=>"dd", "email"=>"dd@dd.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"name"=>"dd", "email"=>"dd@dd.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
Unpermitted parameter: :registration
Unpermitted parameter: :registration
Unpermitted parameter: :registration
ユーザ登録時には、emailとnameを受け付けたかったので、以下のようにしていた。
class ApplicationController < ActionController::API
include DeviseTokenAuth::Concerns::SetUserByToken
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :name])
end
end
:registrationが何者か?と思い、調べた結果を記載。
(似た情報では、params.require(:registration).permit(~~)みたいにして解決する情報がすぐにあったが、それ以外の情報が簡単に見つからなかったのでメモ)
結論
railsの(デフォルトの?)挙動で、parameterがwrapされるためのようでした。
https://github.com/lynndylanhurley/devise_token_auth/issues/1178 からの-> https://github.com/heartcombo/devise/issues/4825
で判明。
たしかに、以下のようになっていた。
config/initializers/wrap_parameters.rb
ActiveSupport.on_load(:action_controller) do
wrap_parameters format: [:json]
end
railsも作り立てで他への影響がないので、initializerで以下のように変更。
config/initializers/wrap_parameters.rb
ActiveSupport.on_load(:action_controller) do
wrap_parameters format: []
end