Ruby on rails 从InvalidCrossOriginRequest中救援时Rails 4.1中的DoubleRenderError
今天我已经升级到Rails 4.1.0。跨站点请求伪造(CSRF)保护现在也包括带有JavaScript响应的GET请求 我在应用程序中有几个被机器人击中的远程获取链接,现在抛出ActionController::InvalidCrossOriginRequest异常 因此,我将另一个rescue_从line添加到应用程序_控制器:Ruby on rails 从InvalidCrossOriginRequest中救援时Rails 4.1中的DoubleRenderError,ruby-on-rails,Ruby On Rails,今天我已经升级到Rails 4.1.0。跨站点请求伪造(CSRF)保护现在也包括带有JavaScript响应的GET请求 我在应用程序中有几个被机器人击中的远程获取链接,现在抛出ActionController::InvalidCrossOriginRequest异常 因此,我将另一个rescue_从line添加到应用程序_控制器: rescue_from ActionController::InvalidCrossOriginRequest, with: :render_400 以下是ren
rescue_from ActionController::InvalidCrossOriginRequest, with: :render_400
以下是render_400方法:
def render_400
render(nothing: true, status: 400) and return
end
我仍然得到了AbstractController::DoubleRenderError,尽管我添加了并返回了,正如您在上面看到的
它仅在ActionController::InvalidCrossOriginRequest异常时发生。其他如ActionController::BadRequest,但不会导致AbstractController::DoubleRenderError。根本原因是在触发错误之前分配了响应体的某些部分
在调用异常处理程序中的render
之前,可以尝试清除响应正文
def render_400
# Clear the previous response body to avoid a DoubleRenderError
# when redirecting or rendering another view
self.response_body = nil
render(nothing: true, status: 400)
end
我遇到Rails 5.1的问题,但此解决方案不起作用:/