1

我在 Rails3.2 devise_invitable (1.1.8), devise (3.1.1) 没有强参数,当我尝试注册用户时,我得到以下日志。我正在使用这条路线来自定义设计邀请控制器:

devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, :controllers => { :invitations => 'team_invitations' }

但是为什么注册请求发送到 DeviseInvitable::RegistrationsController 而不是设计注册控制器

Started POST "/users" for 127.0.0.1 at 2013-10-02 21:27:50 +1300
Processing by DeviseInvitable::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"thlkjyVYHhFY3erB+9yI7uwotIU7GozswOdjz9w7DNA=", 
"user"=>{"username"=>"", "email"=>"boopage@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"Sign up"}
Unpermitted parameters: username, email, password

谢谢

4

4 回答 4

2

这已经过时了,我非常确定上面提供的解决方案现在都没有工作(因为,我遇到了同样的问题)。

扩展可邀请的控制器并向其添加以下代码行:

#app/controllers/invitations_controllers.rb
class InvitationsController < Devise::InvitationsController
def edit
   super
end

private
def update_resource_params
    params.require(:user).permit(:email, :password, :password_confirmation, :your_params, :invitation_token)
end

要扩展控制器,您需要创建以下内容:

#app/routes.rb
devise_for :users, :controllers => { invitations: 'invitations' }

瞧!

于 2016-12-09T16:03:34.683 回答
1

您需要在应用程序控制器中编辑强参数:这将有助于https://github.com/scambra/devise_invitable#strong-parameters

devise_parameter_sanitizer.for(:invite) do |u|
   u.permit(username, :email, :password, :password_confirmation,
         :invitation_token)
end
于 2014-05-26T15:17:41.123 回答
0

在控制器/application_controller.rb 添加:

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_in) << :username
    devise_parameter_sanitizer.for(:sign_in) << :email
    devise_parameter_sanitizer.for(:sign_in) << :password
  end
于 2014-02-07T00:04:04.850 回答
0

有同样的问题,上面的解决方案对我不起作用。所以我为设计模块做了一点猴子补丁(来源https://github.com/scambra/devise_invitable/blob/a50e37bc43509f7be02be8bca2b072b55e66eeaf/lib/devise_invitable/parameter_sanitizer.rb):

模块设计邀请
  模块 ParameterSanitizer
    CUSTOM_FIELDS = [:field1, :field2]

    私人的

    如果定义了?(设计::BaseSanitizer)
      def 许可(钥匙)
        default_params.permit(*Array(keys))
      结尾

      def attributes_for_with_invitable(kind)
        案例类型
        何时:邀请
          resource_class.respond_to?(:invite_key_fields) ?resource_class.invite_key_fields.concat(CUSTOM_FIELDS):[]
        当 :accept_invitation
          [:密码, :password_confirmation, :invitation_token]
        else attributes_for_without_invitable(kind)
        结尾
      结尾
    别的
      def initialize_with_invitable(resource_class, resource_name, params)
        initialize_without_invitable(resource_class,resource_name,params)
        许可(:邀请,键:(resource_class.respond_to?(:invite_key_fields)?resource_class.invite_key_fields.concat(CUSTOM_FIELDS):[]))
        permit(:accept_invitation, 密钥: [:password, :password_confirmation, :invitation_token] )
      结尾
    结尾
  结尾
结尾

只需将其放入初始化程序即可。

于 2016-01-22T13:09:34.423 回答