如何在Ruby on Rails应用程序中拯救OAuth :: Unauthorizedexception?

如何从Ruby on Rails应用程序中从OmniAuth引发的OAuth :: Unauthorizedexception中解救出来?

显然这个:

rescue_from OAuth::Unauthorized, :with => :unauthorized 

将无法正常工作,因为它只捕获Rails中抛出的exception,并且此exception会被抛出到机架链中的其他位置。

在这个应用程序中,管理员(而不是我们,开发人员)为twitter和facebook配置凭据,因此有错误的可能会发生并确实发生。 当发生这种情况时,我想表明一个更好的信息“出事了”。

更新 :我还询问了omniauth谷歌小组 ,到目前为止还没有答案,但如果你正在阅读这个问题,你可能想看看它。

OmniAuth在Rack Middleware中运行,因此rescue_from不会影响它,因为这是通过ActionController在OmniAuth之上的抽象级别。

此错误通常是由于您的OAuth设置配置错误造成的。 基本上它是说您的应用程序无权进行身份validation,而不是用户的身份validation失败。

配置错误是您作为开发人员想要缓解的问题,因此我不确定您为什么要抢救这样的exception。

如果您绝对必须挽救此exception,则可以覆盖并使用inheritance自OmniAuth的中间件

 module OmniAuth module Strategies class FacebookWithExceptionHandling < OmniAuth::Strategies::Facebook def call begin super raise OmniAuth::Unauthorized => e #handle appropriately in rack context here end end end end end Rails.application.config.middleware.use OmniAuth::Builder do provider OmniAuth::Strategies::FacebookWithExceptionHandling, api_key, #your api key secret_key, #your secret key end