Ruby on rails 添加自定义参数以设计注册-未经许可的参数

Ruby on rails 添加自定义参数以设计注册-未经许可的参数,ruby-on-rails,ruby-on-rails-3,devise,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 3,Devise,Ruby On Rails 5,我一直在尝试自定义designe register方法,以注册更多参数并更新更多参数(到目前为止运气不佳),但我总是得到不允许的参数:错误。我试着用这个和,但我无法克服 我还考虑过创建一个新表来保存一个外键用户id,并将诸如user\u id、display\u name、profile\u picture之类的内容放在表中,但在尝试从同一页面提交所有内容时,我也会遇到同样的问题(与designe控制器发生冲突) 你对我如何解决这个问题有什么建议吗?我还需要发布什么 routes.rb devi

我一直在尝试自定义designe register方法,以注册更多参数并更新更多参数(到目前为止运气不佳),但我总是得到
不允许的参数:
错误。我试着用这个和,但我无法克服

我还考虑过创建一个新表来保存一个外键用户id,并将诸如
user\u id、display\u name、profile\u picture
之类的内容放在表中,但在尝试从同一页面提交所有内容时,我也会遇到同样的问题(与designe控制器发生冲突)

你对我如何解决这个问题有什么建议吗?我还需要发布什么

routes.rb

devise_for :users, controllers: { registrations: 'users/registrations' }
用户/注册中心

def create
    build_resource(registration_params)

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
        respond_with resource, :location => after_sign_up_path_for(resource)
      end
    else
      clean_up_passwords
      respond_with resource
    end
  end

private
  def registration_paramss
    params.require(:user).permit(:email, :display_name, :terms_of_services, :profile, :password, :password_confirmation)
  end

看起来您只需要告诉Desive应该允许哪些参数。默认情况下,designe允许电子邮件(或用户名,具体取决于配置)、密码和密码确认参数。你只需要添加更多

这项研究提出了一种“懒散的方式”来设置它

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:display_name])
  end
end
本质上,您必须了解您的注册表单是如何发布参数的,以了解如何在控制器中配置强参数。确保您也阅读了语法


希望有帮助

对于Desive 4.2.0,您可以通过将这些值添加到键中,将用户表的其他参数列为白名单。默认情况下,Desive现在会给你留言。下面我添加了
:化身

  # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :avatar])
  end

在我的情况下,这起了作用:

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

    protected

    def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:name, :last_name, :image,:email, :password, :password_confirmation, :current_password) }
    end
end
class ApplicationController
公认的答案是配置应该放在应用程序控制器中,但它可以放在用户注册控制器中,您可以指定只为create方法运行配置,而不为其他任何操作运行配置:


class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:enter_param_name_here])
  end
end

类用户::注册控制器<设计::注册控制器
在\u操作之前:配置\u注册\u参数,仅:[:创建]
受保护的
def配置\注册\参数
设计参数消毒剂。许可证(:注册,按键:[:在此输入参数名称])
结束
结束

请发布您的设备配置。@31piy更新了它您使用的是什么版本的设备?您能给我们看一下被覆盖的控制器(用户/注册)吗?只需创建操作和自定义注册参数的部分。@gkats已编辑。我只是“设计”了一个版本。对于创建控制器,我尝试了在问题中发布的链接中找到的内容。我不知道
build\u resource
如何在designe中工作,但我不想弄乱designe的功能。请查看您的Gemfile.lock文件并搜索designe。您应该能够找到版本。您还可以从项目的根文件夹运行
gem list designe
)。实际上,问题出在SessionController中。在尝试创建用户之后,它将尝试让用户登录,会话控制器仍然认为这些参数是不允许的。我也应该修改会话控制器吗?这两种解决方案最终都会出现这个问题。您可以通过为
:sign_in
指定参数来尝试。但这看起来很奇怪,因为据我所知,Desive并没有重定向,它只是注册了用户。您遇到的这个错误,是错误还是警告?如果注册成功并保存了您的模型,您就不应该关心“未经允许的参数”警告。很遗憾,用户没有保存。我每次都检查,希望它能出现,但我只有seeds用户。我删除了所有额外的参数,即使是简单的注册也不起作用。我发现更多的人有这个问题。我进入了控制台
Unpermitted参数:password\u confirmation
。是否可以删除您的答案,这样我就可以删除该问题,还是应该将其留在这里?我有一个完全不同的问题。如果我在网上找不到解决方案,我将发布一篇关于我的问题的新文章。有很多关于会话未经许可的参数的帖子,但到目前为止还没有一篇有效。

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:enter_param_name_here])
  end
end