如何在经典 sinatra 应用程序中配置omniauth 使用memcached 作为谷歌的后备存储?

Posted

技术标签:

【中文标题】如何在经典 sinatra 应用程序中配置omniauth 使用memcached 作为谷歌的后备存储?【英文标题】:How do I configure omniauth use memcached as a backing store with google in classic sinatra app? 【发布时间】:2013-04-13 11:04:21 【问题描述】:

我正在尝试调试当 EC2 ELB 后面有多个应用服务器时使用 Google 执行 oauth 失败的问题。我认为该问题与未共享 oauth 后备存储这一事实有关。我们采用的解决方案运行了 2 年多,然后在 2 天前突然开始失败,我不知道这是我的配置问题还是谷歌改变了一些东西。

我认为要解决问题,我必须使用共享存储,例如 memcached。

这是我在经典风格的 sinatra 应用中尝试这样做的:

Sinatra::Application.use ::OmniAuth::Strategies::OpenID do
  OpenID::Store::Memcache.new(Memcached.new('my_memcached_machine'))
end

不幸的是,这仍然没有解决问题。据我所知,OmniAuth 从未对 memcached 执行任何 get 或 set 请求。

在经典风格的 sinatra 应用程序中尝试向 google 进行身份验证时,这是让 omniauth 使用 memcached 的正确方法吗?

【问题讨论】:

【参考方案1】:

这是我发现的一种可行的方法,但我相信还有更好的方法...

module Rack
  class OpenID
    def initialize(app, store = nil)
      @app = app
      @store = ::OpenID::Store::Memcache.new(OpenIDMemcachedManager.new('...'))
    end
  end
end

【讨论】:

以上是关于如何在经典 sinatra 应用程序中配置omniauth 使用memcached 作为谷歌的后备存储?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MiniZip 库读取 omni.jar 存档文件

如何在 Sinatra 应用程序中链接 Sass 文件?

您如何在 Sinatra 中选择您的 HTTP 服务器?

如何使用 HAML 提高 Sinatra 性能?

如何在OSX上解压缩omni.ja?

如何清理进入 Sinatra 应用程序的所有参数?