如何从 Ruby on Rails 应用程序中的 OAuth::Unauthorized 异常中拯救出来?

2024-01-01

如何挽救 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(使用前将#替换为@)

如何从 Ruby on Rails 应用程序中的 OAuth::Unauthorized 异常中拯救出来? 的相关文章

随机推荐

  • 对象类型的 JAXB 属性抛出空指针异常?

    我正在尝试注释一个 java 类 以使用具有 value 属性的元素创建 JAXB 模式 代码如下 XmlAttribute name value public Object getSettingValue return this sett
  • qt linux "QMAKE_CXXFLAGS += -std=c++11" 相当于 Windows 吗?

    我是一个新手 所以如果这真的很愚蠢 请原谅我 最近我在ubuntu中使用qt做了一个项目 我使用 QMAKE CXXFLAGS std c 11 进行静态链接 一切都很顺利 所以我想为什么不在Windows上重新编译它 我就这么做了 这是n
  • HttpRuntime 缓存与静态字典/字段

    主要有哪些pros and cons使用 HttpRuntime Cache 反对使用简单的静态字段 我需要在整个 ASP NET 应用程序范围内存储数据 HttpRuntime Cache MyData someHashtable vs
  • 用于提高性能的代码分析:查看 mscorlib.dll 内的 CPU 周期?

    我做了一个小型测试基准来比较 NETSystem Security CryptographyAES 实现与 BouncyCastle Org 的 AES 对比 GitHub 代码链接 https github com sidshetye B
  • clojure.xml/emit 发生了什么?

    许多博客都提到了 clojure xml emit 或 clojure contrib lazy xml emit 函数 但 1 2 文档中似乎没有它 它被弃用了吗 什么取代了它 它可以用来编写 Clojure 编码的 XML 例如 tag
  • Django Forms DateInput 小部件未填充

    我有一个 django 编辑表单 其中包含模型中的许多字段 包括一些日期字段 为了获得合适的格式 我使用了 DateInput 小部件 不幸的是 当我们编辑对象时 所有其他字段都已经填充了现有数据 但日期除外 日期处于其初始状态 dd mm
  • 如何在anaconda中安装包?

    我想将音乐包添加到 anaconda 解释器中 我使用的是 ubuntu 14 04 64 位 我从anaconda云下载了music21 1 9 3 tar gz 我将其解压到 anaconda3 pkgs ext installer p
  • 将日期输入类型默认值设置为今天、明天、任意日期?

    在 HTML5 中 没有在 value 属性中指定 今天 的本机方法 这是我非常喜欢的 jQuery 代码 如何扩展此代码来设置 今天的日期到var today 明天的日期到var tomorrow 计算得出的任何日期var anydate
  • 如何在java中创建枚举对象

    我试图定义枚举类 Item 的三个不同对象 其权重在 0 到 20 之间以及每个项目的描述 这是我的代码 public enum Item Three Items with descriptions GOLD 2 gold SILVER 1
  • 如何使用Java中的文件中的特定行号读取特定行?

    在Java中 有什么方法可以从文件中读取特定行吗 例如 读取第 32 行或任何其他行号 对于小文件 String line32 Files readAllLines Paths get file txt get 32 对于大文件 try S
  • 如何在AWS EMR上重新启动yarn

    我正在使用 Hadoop 2 6 0 emr 4 2 0图像 我做了一些改变yarn site xml并希望重新启动纱线以使更改生效 有一个命令可以用来执行此操作吗 编辑 2017 年 10 月 26 日 AWS 官方已在此处发布了有关如何
  • Angular 5(Karma / Jasmine 测试)- 使用模拟后端来模拟错误消息的错误响应

    我不太明白 MockBackend 功能是如何工作的描述在这里 https angular io api http testing MockBackend 我对 Angular 完全陌生 我想编写一些测试用例 以确保当后端发生服务器错误时
  • 用于平铺渲染的 OpenGL 矩阵设置

    看完之后datenwolf 2011 年关于 OpenGL 中基于图块的渲染设置的回答 https stackoverflow com questions 6490728 capture snapshot of opengl window
  • 使用 Monkey Test 时如何防止输入设置

    我在 Android 设备 LG G4 中对我的应用程序进行了猴子测试 命令是 adb shell monkey p package name v 2000 但它可能会意外进入设置并更改我的设备的默认值 如何预防呢 Monkey支持黑名单
  • 使用 KVO 更改属性时发送通知

    我有一个名为myName在我的课堂上 比如 property nonatomic strong NSString myName 我需要在以下情况时发送通知myName属性的值发生改变 现在我正在做类似的事情 void setMyName N
  • 如何在设计时进行调试?

    我使用 UserControl 创建了一个自定义 ListView 当鼠标进入 ColumnHeader 时 它应该在设计时改变颜色 它有效 但我需要调试代码 如何在设计时调试代码 See 演练 在设计时调试自定义 Windows 窗体控件
  • 可以删除Android依赖吗?

    我有一个应用程序 到目前为止一直工作和编译得很好 但是 当我转到 导出 时 会自动添加 Android 依赖项 这会引发 转换为 Dalvik 格式失败 错误 1 我对此进行了研究 我知道这是因为 Android 依赖项添加了重复文件 我目
  • 加入具有不同排序规则问题的列

    我正在使用 SQL Server 2005 我有两个表 它们使用不同的排序规则 不允许连接具有不同排序规则的表中的列 例如不允许使用以下 SQL select table1column1 table2column2 from 我的问题是 为
  • C++/SDL2——渲染一个圆[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我用 SDL2 画一个实心圆 方向正确吗 我认为使用参数方程和趋于零的半径是可行的 但在处理器使用方面似乎效率很低 任何其他想法都非常感谢 提前
  • 如何从 Ruby on Rails 应用程序中的 OAuth::Unauthorized 异常中拯救出来?

    如何挽救 Ruby on Rails 应用程序中 OmniAuth 引发的 OAuth Unauthorized 异常 显然是这样的 rescue from OAuth Unauthorized with gt unauthorized 不