在我的rails4项目中,我正在使用客户端验证gem(分支4-0-beta)。
出于安全原因,我在config / initializers / client_side_validations.rb文件中禁用了唯一性验证。
ClientSideValidations :: Config.disabled_validators = [:uniqueness]
这很好用,当我在浏览器中测试是否存在用户电子邮件时,无论用户是否存在,我都会获得500状态。
的http://本地主机:3000 /验证/唯一CASE_SENSITIVE =假和ID = 01&安培;用户[电子邮件] =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状态代码的服务器错误消息。
对于这种情况下的适当状态代码或替代解决方案的任何建议都会很酷。