【问题标题】:Overriding Omniauth key/secret combinations from a controller in rails从 Rails 中的控制器覆盖 Omniauth 密钥/秘密组合
【发布时间】:2012-08-13 17:43:40
【问题描述】:

我在 rails 中有一个 Omniauth 设置,在 config/initializers 中有一个常规的 omniauth.rb 配置文件,例如:

    provider :twitter, :setup => lambda { |env|
      twitter_key = keychain.key "twitter"
      twitter_secret = keychain.secret "twitter"

      Rails.application.config.twitter_key = twitter_key
      Rails.application.config.twitter_secret = twitter_secret
      env['omniauth.strategy'].options[:consumer_key] = twitter_key
      env['omniauth.strategy'].options[:consumer_secret] = twitter_secret}

这很好用,但我希望能够使用与我的应用程序中的控制器不同的密钥/秘密组合来覆盖此密钥/秘密组合。我该怎么做呢?

我一直在寻找很长一段时间没有成功。希望这足够具体。

【问题讨论】:

    标签: ruby-on-rails facebook twitter omniauth linkedin


    【解决方案1】:

    在您的 omniauth.rb 上,执行以下操作:

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :twitter,:setup => true
    end
    

    然后在您的控制器上,您必须定义以下内容:

    def setup
     request.env['omniauth.strategy'].options[:consumer_key] = @site.twitter_key
     request.env['omniauth.strategy'].options[:consumer_secret] = @site.twitter_secret
     render :text => "Setup complete.", :status => 404
    end
    

    当然,你必须在你的 routes.rb 中添加相关的路由。

      #Twitter Omniauth routes
      match '/auth/twitter/callback' => 'session#authorize_callback'
      match '/auth/twitter/setup' => 'session#setup'
    

    祝你好运

    问候。 伊万。

    【讨论】:

    • 我很欣赏这个答案,但它似乎不适用于我当前的设置。 request.env['omniauth.strategy'] 在控制器中对我来说是零。这与我之前的尝试中遇到的问题相同!我应该在配置中做些什么才能使其可用。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多