1

在我的 rails4 项目中,我使用的是客户端验证gem(分支 4-0-beta)。

出于安全原因,我在 config/initializers/client_side_validations.rb 文件中禁用了唯一性验证。

ClientSideValidations::Config.disabled_validators = [:uniqueness]

这很好用,当我在浏览器中测试用户电子邮件是否存在时,无论用户是否存在,我都会得到 500 状态。

http://localhost:3000/validators/uniqueness?case_sensitive=false&id=01&user[email]=tester@mail.com&_=1379052030490

(如果没有禁用唯一性,我会收到 200 或 404 状态响应,具体取决于用户是否唯一。)

HTTP 状态码

但是我不确定我是否正确理解了 middleware.rb 中定义的状态码:

client_side_validations / lib / client_side_validations / middleware.rb

  def call(env)
    if matches = /^\/validators\/(\w+)$/.match(env['PATH_INFO'])
      if ClientSideValidations::Config.disabled_validators.include?(matches[1].to_sym)
        [500, {'Content-Type' => 'application/json', 'Content-Length' => '0'}, ['']]
      else
        "::ClientSideValidations::Middleware::#{matches[1].camelize}".constantize.new(env).response
      end
    else
      @app.call(env)
    end
  end
end

我的理解是状态码 500 应该用于服务器错误(“一般错误消息,在没有更具体的消息适合时给出”)。但是在这种情况下,唯一性验证被故意禁用,因此我在想 403“禁止”或 405“方法不允许”是否更合适?

我对 500 状态不太满意的原因是 Chrome 会自动显示服务器错误消息,并且由于 client_side_validation gem 没有引发异常,我可以在 rails 中捕获,所以我被 Chrome 的默认服务器错误消息卡住了500 状态码。

在这种情况下有关适当状态代码或替代解决方案的任何建议都会很酷。

4

0 回答 0