如何使用 devise_token_auth gem 允许参数到特定的 devise_controller?

How to permit params to a specific devise_controller with devise_token_auth gem?

我正在使用 devise_token_authentication gem 构建基于令牌的身份验证 rails api,然后我向 Vendor 模型添加了一些额外的字段通过不同的迁移,为了允许它们,我写了这个:

class ApplicationController < ActionController::Base    
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :tax_number])
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :tax_number])
  end
end

然后我添加了另一个模型Customer rails g devise_token_auth:install Customer auth

然后在 routes.rb

Rails.application.routes.draw do
  mount_devise_token_auth_for 'Vendor', at: 'vendor/auth'
  mount_devise_token_auth_for 'Customer', at: 'customer/auth'
end

每次我尝试通过 'localhost:3000/customer/auth' 与客户 sign_up 时,我收到错误消息:ActiveModel::UnknownAttributeError: unknown attribute 'tax_number' for Customer.

那么有什么方法可以只允许 Vendor 模型的额外字段并跳过 'Customer' 吗?

看看this setup for multiple devise user models.

如果您覆盖 RegistrationsController,您需要直接在 registrationsController

中允许额外的参数
class Users::RegistrationsController < DeviseTokenAuth::RegistrationsController
  def create

  end

  def account_update

  end

  private


  def sign_up_params
    params.require(:user).permit(:email, :password, :password_confirmation, :first_name, :last_name, :tax_number)
  end
end