【问题标题】:Adding custom field to devise User model error添加自定义字段以设计用户模型错误
【发布时间】:2016-10-28 12:23:51
【问题描述】:

我正在使用 gem Devise 向我的模型用户添加一个全名(字符串)值。

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  include Authorization
  protect_from_forgery with: :exception
end

还有

# app/controllers/concerns/Authorization.rb

module Authentication
  extend ActiveSupport::Concern

  private

  def devise_parameter_sanitizer
    if resource_class == User
      User::ParameterSanitizer.new(User, :user, params)
    else
      super
    end

  end
end


# app/controllers/sanitizers/user/parameter_sanitizer.rb

class User
  class ParameterSanitizer < Devise::ParameterSanitizer
    USER_PARAMS = %i(
      full_name
      email
      password
      password_confirmation
    ).freeze

    def sign_up
      default_params.permit(USER_PARAMS)
    end

    def account_update
      default_params.permit(USER_PARAMS)
    end
  end
end

一切正常,但我在创建用户时出错
Unpermitted parameter: full_name

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails devise strong-parameters


    【解决方案1】:

    我认为问题在于USER_PARAMS 是一个数组。

    USER_PARAMS
    # => [:full_name, :email, :password, :password_confirmation]
    

    但你需要允许类似的属性

    permit(:full_name, :email, :password, ...)
    

    所以你可以尝试做

    default_params.permit(*USER_PARAMS)
    

    更新

    查看设计source code
    似乎您可以使用 devise_parameter_sanitizer.permit 来允许附加键,例如 :sign_up 操作。
    喜欢

    devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])
    

    请注意,devise 已经定义了一些 DEFAULT_PERMITTED_ATTRIBUTES,因此您无需重新定义它们。

    所以我认为下面的代码应该适合你

    class ApplicationController < ActionController::Base
      before_action :configure_permitted_parameters, if: :devise_controller?
    
      protected
    
      def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])
        devise_parameter_sanitizer.permit(:account_update, keys: [:full_name])
      end
    end
    

    【讨论】:

    • 还是同样的问题
    • 问题出在强大的参数上。你还有Unpermitted parameter: full_name吗?
    • 是的,还是一样的错误,整天想办法解决问题
    • 我将尝试为自己重现该问题,以提供 100% 肯定的答案。顺便说一句,也许你可以分享你的代码?
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多