2

在我的 Rails 3.1 应用程序中,我rescue_from在基本 API 控制器之上有一个如下所示:

rescue_from Exceptions::InvalidApiKey, :with => :invalid_api_key

在 invalid_api_key 看起来像这样:

def invalid_api_key
    Rails.logger.debug "Invalid API key"
    render :json => {:error => :invalid_api_key}, :status => :forbidden
end

有一个before_filter检查 API 密钥并在需要时抛出 InvalidApiKey 异常。

但是,AbstractController::DoubleRenderError当我尝试使用错误的 API 密钥的控制器时,我得到一个错误,因为它试图在异常处理程序和原始操作中呈现。

我怎样才能避免这种情况?

4

1 回答 1

0

您需要停止控制器的链条return falsebefore_filter

否则,它首先呈现错误invalid_api_key并使用“常规”流程(因为您已经从异常中解救出来)转到调用的操作,然后尝试从操作中再次呈现。

所以

def invalid_api_key
    Rails.logger.debug "Invalid API key"
    render :json => {:error => :invalid_api_key}, :status => :forbidden 
    false
end

应该解决问题

于 2012-08-15T14:35:57.050 回答