如何挽救 Ruby on Rails 应用程序中 OmniAuth 引发的 OAuth::Unauthorized 异常?
显然是这样的:
rescue_from OAuth::Unauthorized, :with => :unauthorized
不起作用,因为它只能捕获 Rails 内部抛出的异常,并且该异常是在机架链中的其他位置抛出的。
在此应用程序中,管理员(而不是我们,开发人员)配置 twitter 和 facebook 的凭据,因此可能会发生错误的凭据,而且确实会发生。当这种情况发生时,我想展示一个更好的信息“出了问题”。
Update: 我也在omniauth google group上询问 https://groups.google.com/d/msg/omniauth/8qVN6RyMk48/wMy_zj4nq1AJ,到目前为止还没有答案,但如果您正在阅读这个问题,您可能想查看一下。
OmniAuth 从 Rack Middleware 运行,因此救援_from 不会影响它,因为这是通过 ActionController 高于 OmniAuth 的抽象级别。
此错误通常是由于 OAuth 设置配置错误造成的。基本上,它是说您的应用程序无权进行身份验证,而不是用户的身份验证失败。
作为开发人员,您希望减轻配置错误,因此我不确定您为什么要挽救这样的异常。
如果您绝对必须挽救此异常,您可以覆盖并使用继承自 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)