法拉第超时错误与omniauth(自定义策略)/门卫

2023-11-25

我目前正在关注这个铁路广播公司对于我的具体情况,我在omniauth的回调中遇到了法拉第超时错误。

目前,我使用 Rails 应用程序作为 API,并使用骨干网作为 javascript 前端(在同一应用程序上)

我决定使用 OAuth 锁定 API,并为 Omniauth 提供自定义策略以作为客户端访问 API,并为 Doorkeeper 提供处理授权逻辑的策略

 module OmniAuth
      module Strategies
        class Twiddle < OmniAuth::Strategies::OAuth2
          option :name, :twiddle
    
          option :client_options, {
            site: "http://localhost:3001",
            authorize_path: "/oauth/authorize"
          }
    
          uid do
            raw_info["id"]
          end
    
          info do
            { 
              firstName: raw_info["firstName"],
              lastName: raw_info["lastName"], 
              email: raw_info["email"]
            }
          end
    
          def raw_info
            @raw_info ||= access_token.get('/api/v1/user').parsed
          end
        end
      end
    end

我包括这样的自定义策略:

require File.expand_path('lib/omniauth/strategies/twiddle', Rails.root)

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twiddle, id, secret # Omitting the actual ones for obvious reasons
end

我目前正在我的捆绑包中使用这些宝石

# OAuth 
gem 'oauth2'
gem 'omniauth'
gem 'omniauth-oauth2'
gem 'omniauth-facebook'
gem 'doorkeeper'

这是我进行身份验证并尝试检索正确的访问令牌的地方(也是我陷入困境的地方)

 def loginParse
    if ( user = User.authenticate( params[:email], params[:password] ) ) 
      session[:user_id] = user.id
      redirect_to '/auth/twiddle/' 
    else 
      render :controller => "authentication", :action => "loginIndex", :notice => "Incorrect credentials" 
    end
  end

这是来自routes.rb的路由

  # Oauth urls
  match '/auth/twiddle/callback', to: "authentication#connectAPI"
  match "/auth/facebook/callback", to: "authentication#loginSocialMedia"

应用程序永远无法呈现 connectAPI 操作,此时完全陷入困境(由服务器日志给出)

  User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  Doorkeeper::Application Load (0.2ms)  SELECT `oauth_applications`.* FROM `oauth_applications` WHERE `oauth_applications`.`uid` = '' LIMIT 1
  CACHE (0.0ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  Doorkeeper::AccessToken Load (0.3ms)  SELECT `oauth_access_tokens`.* FROM `oauth_access_tokens` WHERE `oauth_access_tokens`.`revoked_at` IS NULL AND `oauth_access_tokens`.`application_id` = 1 AND `oauth_access_tokens`.`resource_owner_id` = 1 ORDER BY created_at desc LIMIT 1
   (0.1ms)  BEGIN
  Doorkeeper::AccessGrant Load (0.2ms)  SELECT `oauth_access_grants`.* FROM `oauth_access_grants` WHERE `oauth_access_grants`.`token` = '' LIMIT 1
  SQL (1.1ms)  INSERT INTO `oauth_access_grants` (`application_id`, `created_at`, `expires_in`, `redirect_uri`, `resource_owner_id`, `revoked_at`, `scopes`, `token`) VALUES (1, '2012-08-08 03:10:31', 600, 'http://localhost:3001/auth/twiddle/callback', 1, NULL, '', '')
   (1.4ms)  COMMIT
Redirected to http://localhost:3001/auth/twiddle/callback?code=a
Completed 302 Found in 12ms (ActiveRecord: 3.7ms)
(twiddle) Callback phase initiated.

日志中省略了许多 uids/重要信息。

最后给出了这个错误:

法拉第::错误::超时错误(超时::错误):

我希望我已经彻底解释了这个问题。

我不知道为什么应用程序似乎在omniauth 的回调启动部分冻结。我已经尝试更新捆绑程序,因为其他一些 stackoverflow 问题已经指出,但它不起作用。

也许我对OAuth2的理解有点模糊。

如果有人可以帮助我,我将不胜感激


我不确定这是否适用于您,这是我的情况:

Problem

  • 包含我们内部 OAuth 服务器所需数据的应用程序
  • OAuth 服务器上几乎没有数据
  • 我们希望将 App1 的身份验证部分卸载到 App2,而不移动数据

Solution

  • App1使用App2作为身份验证服务器
  • App2 使用 App1 获取用户数据

此解决方案存在的问题

死锁 - App1 正在等待来自 App2 的 OAuth 响应,但尚未完成 该响应 App2 必须等待来自 App1 的响应。

最终观察

在Rails(使用WebBrick)上的开发模式下,您无法运行多线程,因此请求 可能永远不会被允许完成。

我的解决方案

我的解决方案是安装puma并添加到config/environments/development.rb:

if ENV["THREADS"]
  config.threadsafe!
end

然后当你启动服务器时你会做THREADS=1 rails s Puma测试你的 OAuth 的东西。

OR

或者您的场景完全不同,并且您实际上没有在之间进行通信 您的服务。是你的extra_info(就像Github的/user) 端点运行于 OAuth 服务器?你的回调实际上做了什么吗?

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

法拉第超时错误与omniauth(自定义策略)/门卫 的相关文章

  • 强制执行 has_many 但当前只有一个关联的“rails 方式”是什么?

    我有一个简单的 Rails 应用程序 其中包含模型项目和阶段 一个项目有许多阶段 但一次只能有一个阶段处于活动状态 即 当前 我仍然希望其他阶段可以访问 但当前阶段应该是应用程序的主要锚点 关于如何实现此要求的决定对我如何处理模型访问 验证
  • rvm + Rails3 + gmaps4rails -acts_as_gmappable

    我是一个红宝石导轨之类的菜鸟 抱歉 如果我的问题很愚蠢 我设置了一个运行 ruby 1 8 7 p334 的 rvm 作为用户 环境 我已经为我的 应用程序 创建了一个 gemset 现在我想在页面上显示地址的地图 我四处寻找 发现了 gm
  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • Rails Accepts_nested_attributes_for 子级在验证时没有设置父级

    验证时 我试图在子模型中访问我的父模型 我在 has one 上发现了一些关于反向属性的信息 但我的 Rails 2 3 5 无法识别它 因此它一定从未进入发行版 我不确定这是否正是我所需要的 我想根据父属性有条件地验证子属性 我的父模型已
  • 如何使用 ServiceStack 作为 OAuth2.0 的资源服务器来构建安全的 api?

    我已经使用构建了 OAuth2 0 授权服务器点网开放验证 https github com AArnott dotnetopenid它将管理身份验证 授权并将 accessToken 分配给调用者 调用者将使用访问令牌访问资源服务器上的
  • Rails Resque 作业无法访问数据库,I/O 错误

    我遇到错误 无法找到任何相关信息 这是一个 Ruby on Rails 堆栈 Ruby 1 9 Rails 3 2 并使用 sqlite3 数据库进行开发 Resque 和 Redis 用于后台作业 Rails Web 应用程序启动正常 可
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • ActionMailer 响应“501 5.5.4 无效参数”

    我正在 Ruby 2 0 0 上使用 Rails 4 开发一个应用程序 在 Devise 中注册后 应用程序会发送一封电子邮件 这是发送电子邮件的代码 应用程序 模型 sponsor rb after create send email t
  • 带有 JavaScript 函数的 Submit_tag

    我是rails新手 我想在单击提交按钮时调用javascript函数 我使用了submit tag 但该函数没有被触发 我想要如下所示的东西 我用谷歌搜索了这个问题 但找不到解决方案 请任何人提供解决方案 尝试单击 或者 如果您想使用 on
  • 我们如何获取R中的商品价格?

    正如标题 我知道我们可以使用quantmod包来获取股票价格 但我们如何检索黄金 石油或农产品等商品价格 Use Quandl包 这里有一些例子 Gold lt Quandl LBMA GOLD WTI lt Quandl CHRIS CM
  • Ruby on Rails 是否会使来自外部域的 Graphql 控制器中的会话无效?

    我有一个在不同域上运行的 Rails graphql 服务 但会话变量似乎在graphql controller rb为零 当我在本地运行服务时 会话和上下文按预期工作 这是一个例子 in graphql controller def ex
  • 为什么私有辅助方法仍然可以在视图中访问?

    另一个 为什么会这样 的问题 我注意到私有辅助方法仍然可以在视图中访问 为什么 有没有办法防止这种情况 例如 当具有只能从另一个助手中调用的助手方法时 帮手是混合在一起的模块 http www ruby doc org docs Progr
  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要
  • 带有取消订阅链接的 Rails 电子邮件

    我正在开发一个 Rails 4 2 应用程序 该应用程序每周都会有人们注册的活动 他们会在每次活动之前 每周 收到一封提醒电子邮件 我想要电子邮件中的一键取消订阅链接 这似乎是一个常见的任务 但我还没有找到一个好的当前解决方案 我看到的一些
  • Fields_for 动态标签

    我有动态表单 它有一组值 我创建了一个包含我显示的文本字段的部分 在每个文本旁边 我想显示一个包含文本标题的标签 例如 名字和姓氏以前是未知的 我该如何去做呢 看来我无法直接访问属性 但是当我使用标签字段时 标签中的变量名称显示而不是实际值
  • “after_filter”如何/何时工作/运行?

    我正在使用 Ruby on Rails 3 1 我想知道 对于表现原因 无论是否after filter渲染视图文件后运行 也就是说 当用户访问我的应用程序 URL 时 他 她应该显示的相关视图文件先于渲染after filter运行或af
  • Rails 教程 example_app 在 Heroku 中失败,并显示日志: ActionController::RoutingError (没有路由匹配 [GET] "/about"):

    我正在关注 Rails 教程的在线版本 第 3 章中的 Sample app 在本地运行良好 但是当推送到 Heroku 时 会找到主页 但找不到其他页面 尝试查看 关于 页面后运行heroku日志给了我 以及其他很多 上面的错误 2015
  • 从同一个 Rails 代码库运行多个站点?

    我有一位客户想要将他们在一个领域取得成功的 Rails 应用程序应用到另一个类似的领域 该应用程序的这个新实例将开始非常相似 所有相同的功能 不同的徽标和颜色 但是 如果新网站成功 它将不可避免地需要进行重大自定义 而这些自定义不应应用于原
  • 在 Rails 中获取实际的远程 IP?

    我正在开发 Rails 2 3 8 应用程序 我需要存储实际客户端的远程 IP 地址 request remote ip仅返回127 0 0 1 但我需要存储实际的远程IP 例如93 43 56 77 有红宝石可以买吗 或者如何得到它 尝试
  • Rails 路由:嵌套、成员、集合、命名空间、范围和可定制

    我想更多地了解铁路路线 会员及收藏 Example resource route with options resources products do member do get short post toggle end collecti

随机推荐

  • 将数据从 Python 发送到 Javascript (JSON)

    我知道 JSON 可以解决这个问题 但我在实现它时遇到了问题 这是我的方法的详细信息 数据是用Python计算的 由于数据大小是动态的 因此我需要使用 JavaScript 为输出创建额外的 HTML 表格行 因此 我需要将数据从 Pyth
  • Selenium 服务器错误:无法创建新服务 chromedriverservice

    我尝试在 Windows 10 计算机上运行 webdriverio 但在尝试运行测试 js 文件时不断遇到相同的问题 所以我运行这个 jar your download directory selenium server standalo
  • 重用WCF服务客户端

    我有一个 WCF Web 服务 充当我的 ASP NET 网页的数据提供程序 在整个网页中 通过自动生成的 ServiceClient 对 Web 服务进行了多次调用 目前 我创建一个新的 ServiceClient 并为每个请求打开它 即
  • R 中的连续引用编号:如果是连续的,则用连字符分隔数字 - 如果不是,则添加逗号

    我想生成连续引用数对于 R 中的数字 如果数字是连续的 则应使用连字符分隔它们 否则 数字之间用逗号分隔 例如 数字1 2 3 5 6 8 9 10 11 and 13应该出来为1 3 5 6 8 11 13 这个问题已经被之前回答过c 并
  • 在 Angular 2 中的 @ngModule 中声明多个组件

    我正在开发一个大型应用程序Angular 2 and ASP netMVC 我的应用程序中有大约 120 个组件 它们都在 ngModule 声明块中声明 NgModule imports CommonModule declarations
  • Swift 的 String.count 的 BigO 是什么?

    当 swift 使用时String count is it O n 每次我们调用它时 我们都会迭代整个字符串以对其进行计数 or O 1 其中 swift 之前已经存储了该数组的大小并简单地访问它 绝对是O n 来自斯威夫特书 因此 如果不
  • 使用注解@SpringBootApplication进行配置

    我的 Spring Boot 配置有问题 我已经使用创建了基础 Spring Boot 项目https start spring io 我有一个问题 配置仅适用于子目录中的类 我尝试过注释 ComponentScan但这没有帮助 你知道我能
  • 在 Python 3 中解压缩 gzip 服务器响应的最佳方法是什么?

    我原以为这会起作用 gt gt gt import urllib request as r gt gt gt import zlib gt gt gt r urlopen r Request http google com search q
  • 如何在 OpenGL-ES 2.0 中创建带有纹理(图像)的 Stencil 缓冲区

    我可以在 OpenGL 2 0 中准备带有纹理 图像 的模板吗 这样图像的某些部分将是透明的 因此它将按原样传输到模板缓冲区 然后将使用此模板缓冲区进行进一步绘制 由 datenwolf 编辑以解释答案中的 OP 问题更新 作者 Infin
  • 用向量函数进行数据表聚合,取2

    我正在努力使用 data table 来总结向量函数的结果 这在 ddply 中很容易 问题 1 使用带有向量输出的 昂贵的 函数进行聚合 dt lt data table x 1 20 y rep c a b each 10 这个 ddp
  • 通知中占用大量内存

    我正在开发一个带有服务的应用程序 该服务在通知区域中显示计时器的进度 带有进度条和文本 我在下面提取了一个具有相同问题的更简单的示例 服务代码 public class TNService extends Service private N
  • 如何在 PHP 中对 SHOW TABLES 查询结果应用分页

    我想对结果应用分页SHOW TABLES FROM DATABASE NAME 尝试使用LIMIT关键字 但会引发错误 通过分页 我的意思是查询返回的结果 表 将显示在多个页面上 mysql gt pager less mysql gt s
  • 在 SQL Server 2008 中使用 select 语句加上附加列插入表

    我正在尝试从 select 语句插入表 并向行添加其他参数 例如 SELECT Appt ID Pracitioner ID Appt Book ID Start Time UR NO Type Description FROM TempW
  • 有没有办法在 Windows 和 Linux 上使用 php 检测文件夹中的更改?

    我正在寻找一种解决方案来检测文件夹中的更改php 该应用程序可以在两个平台上运行 linux and windows 只要结果相同 我可能会针对每个平台使用不同的方法 我的愿望是 如果将文件 文件夹添加到目录中 我希望我的应用程序检测到这个
  • 如何在 Openshift3 中禁用粘性会话

    如果您在 Openshift3 中扩展 Pod 来自同一客户端 IP 地址的所有请求都会发送到具有关联会话的容器 是否有任何配置可以禁用粘性会话 如何管理 Openshift 中内部 HAProxy 的选项 对于后代 由于我遇到了同样的问题
  • 使用 Open CV Python 将 Alpha 通道添加到单色图像

    我一直在研究彩色图像 RGB 和带有 alpha 通道 RGBA 的彩色图像 从 RGBA 图像中读取 Alpha 通道非常简单 我什至可以分割图像的 4 个通道 有没有什么方法可以将 Alpha 通道添加到单色或灰度图像 另外 alpha
  • require 未定义 javascript

    编辑 我现在确实意识到了错误 当我测试我的需求时 我正在终端中运行我的脚本 老的 答案可能已经在页面上 但我一直无法找到它 我看到的一般答案是我不能使用 require 客户端 问题是我尝试运行的脚本在我的学校笔记本电脑上完美运行 但它不想
  • PHP随机洗牌数组维护键=>值

    我一直在谷歌上寻找答案 但似乎找不到一些万无一失的东西 而且真的不能把这个搞砸 进入生产站点 我拥有的是具有 20 多个过滤器的高级搜索 它返回一个包含 ID 和距离的数组 我需要做的就是将这些结果打乱 以便每次都以随机顺序显示 我现在出来
  • 应该在电子邮件中使用 PHP_EOL 吗?

    我看到很多 PHP 电子邮件实现都使用 r n 但我也看到其中一些使用 PHP EOL 常量 哪一个更好 谢谢你的帮助都会 如果这是为了终止电子邮件中的行 那么您需要查看的是电子邮件的规范 而不是任何特定平台上使用的规范 电子邮件中的行根据
  • 法拉第超时错误与omniauth(自定义策略)/门卫

    我目前正在关注这个铁路广播公司对于我的具体情况 我在omniauth的回调中遇到了法拉第超时错误 目前 我使用 Rails 应用程序作为 API 并使用骨干网作为 javascript 前端 在同一应用程序上 我决定使用 OAuth 锁定