如何将Sinatra配置为在特定异常上服务403(禁止)



目前,我有这样的东西:

def valid?(stuff)
  #...
end
get '/somewhere'
  return status 403 unless valid?(something) && valid?(something_else)
  # ...
end

(在这种特定情况下,我检查包含文件名的param是否在该参数允许的目录内,以防止用户访问他们不应该访问的内容。)

但它变得很难处理,尤其是因为我在多个地方都有相同的结构。我宁愿做这样的事:

def ensure_valid(stuff)
  raise Forbidden unless valid?(stuff)
end
get '/somewhere'
  ensure_valid(something)
  ensure_valid(something_else)
  # ...
end

有这样的例外吗?如果没有,如果Sinatra(或Rack)捕获到自定义异常,我如何配置它以中止status 403请求?

halt 403 unless valid?(something) && valid?(something_else)也应该工作于

来源:http://www.sinatrarb.com/intro.html#Halting

也许您要查找的是"error"块?

http://www.sinatrarb.com/intro.html#Error

error MyCustomError do
    return status 403
end
raise MyCustomError unless valid?(thing)

最新更新