【问题标题】:OmniAuth dynamic client options site within the strategy策略内的 OmniAuth 动态客户端选项站点
【发布时间】:2012-06-23 19:29:24
【问题描述】:

我有一个 Rails 应用程序设置为 OAuth2 提供程序(使用 Doorkeeper)。该应用程序为每个用户帐户使用不同的子域(或通过 cname 记录使用完全不同的域)

i.e. 
user1.myrailsapp.com
user2.myrailsapp.com
www.mycustomdomain.com

在提供商方面,一切都按预期工作。

我还有第二个应用程序,它是一个使用第一个应用程序公开 API 的客户端。我有一个版本的客户端工作,但在 OmniAuth 策略中只有一个硬编码的网站 url。

问题是,如何根据每个请求动态设置策略 url。

【问题讨论】:

    标签: ruby-on-rails oauth omniauth


    【解决方案1】:

    对于任何感兴趣的人,解决方案是使用动态提供程序:https://github.com/intridea/omniauth/wiki/Dynamic-Providers

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :mystrategy, ENV["OAUTH_ID"], ENV["OAUTH_SECRET"],
        :setup => lambda{|env| 
          env['omniauth.strategy'].options[:client_options].site = env['rack.session']['oauth_site']
        }
    end
    

    【讨论】:

      【解决方案2】:

      一种选择是不要那样做。

      我有一个类似的应用程序并遇到了同样的问题。然而,在考虑了片刻之后,我意识到我不想将它们发送到用户帐户子域上的策略提供者 URL,因为该请求尚未完全验证(它尚未被 rails 应用程序处理) )。

      此外,用户第一次登录的用户帐户子域尚未设置,因此不可能路由到那里。

      因此,我将策略回调 URL 设置为主网站。在处理了登录请求、会话设置和一切之后,我将客户端重定向到他们的用户子域。消除所有的痛苦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        相关资源
        最近更新 更多