0

我在 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}

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

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

4

1 回答 1

0

在您的 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'

祝你好运

问候。伊万。

于 2012-08-17T15:05:19.070 回答