3
0

More than 1 year has passed since last update.

devise_token_authを用いたユーザ登録時の「Unpermitted parameter: :registration」の対処

Posted at

はじめに

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
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0