はじめに
Rails6+vue.jsでSPAを作成しており、ログイン周りでdevise_token_authを使うことにした。
色々な記事を参考にdevise_token_authを追加し、各種設定をして新規登録のテストをしたら下記のエラーを吐いた。
web_1 | Unpermitted parameters: :format, :registration
web_1 | Unpermitted parameters: :format, :registration
web_1 | Unpermitted parameters: :format, :registration
このエラーが出ても処理自体は行えるので実装上は問題ないけど、エラーがあるのは良くないので解決することに。そしたらめっちゃくちゃハマったので備忘録として残しておく。
解決策
devise_token_auth用に作成したcontrollerのストロングパラメータの記述を修正することで解決した。
・エラー吐いてたもともとのやつ
api/auth/registrations_controller.rb
class Api::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController
private
def sign_up_params
params.permit(:name, :email, :password, :password_confirmation)
end
def account_update_params
params).permit(:name, :email)
end
end
・修正してエラーを吐かなくなったやつ
api/auth/registrations_controller.rb
class Api::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController
private
def sign_up_params
# require(:registration)を追加
params.require(:registration).permit(:name, :email, :password, :password_confirmation)
end
def account_update_params
params.permit(:name, :email)
end
end
ストロングパラメータ関連のエラーだと分かってたけど、参考にしたサイトはどれもrequire(:registration)
を省いて書いてたから、この記述でも問題ないと思って他のところを調べてて解決するまでめちゃくちゃ時間かかった。
ちなみに継承元のdevise_token_authでも同じようにストロングパラメータが定義されてたし何でエラーが発生してたかは分からない。
devise_token_auth/app/controllers/devise_token_auth/registrations_controller.rb
def sign_up_params
params.permit(*params_for_resource(:sign_up))
end