【问题标题】:Strong parameters with Rails 4.0 and DeviseRails 4.0 和 Devise 的强大参数
【发布时间】:2015-03-25 11:09:30
【问题描述】:

我使用的是 Rails 4.2,并且 devise.Request 类型将始终为 JSON。我的注册控制器看起来像这样

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

  def create
    if request.format(request) == "application/json"
      build_resource(sign_up_params)
      if resource.save
        render :json => {:success => "true", :message => "Thank You For Registering."}
      else
        render :json => {:success => "false", :message => resource.errors.full_messages}
      end
    else
      super
    end
  end

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:email, :password, :password_confirmation)
    end
  end

end

控制台中显示的参数如下:

 Parameters: {"email"=>"test123@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"email"=>"test123@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}

它产生的错误是控制器无法识别电子邮件和密码字段,并且总是返回如下错误:

["Email can't be blank","Password can't be blank"]

发生这种情况是因为我在代码中写的任何愚蠢之处吗?请帮助

【问题讨论】:

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


    【解决方案1】:

    您的configure_sign_up_params 方法必须是这样才能工作。

    def configure_sign_up_params
      devise_parameter_sanitizer.for(:registration) do |u|
        u.permit(:email, :password, :password_confirmation)
      end
    end
    

    如果您可以看到您发布的控制台内容,则它包含一个以registration 为键的哈希:

    "registration"=>{"email"=>"test123@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2013-06-27
      • 1970-01-01
      相关资源
      最近更新 更多