使用两个Twitter应用程序与Oauth,所以我可以有两个单独的回调

时间:2013-06-11 01:56:14

标签: ruby-on-rails-3 twitter callback omniauth provider

我的rails应用程序需要两次使用Twitter Oauth用于两个不同的目的。第一个是典型的用户登录。第二个是添加帐户,以便可以提前安排推文。以Hootsuite为例。您可以使用Facebook登录以及连接各种Facebook帐户。这需要两个单独的回调。

为了使回调具有独特的功能,我想我可以创建两个不同的应用程序,每个应用程序都有一个单独的回调URL。

但是,在omniauth.rb文件中,只有一种方法可以连接到twitter提供程序。

Rails.application.middleware.use OmniAuth::Builder do
  provider :twitter, ENV["TWITTER_KEY"], ENV["TWITTER_SECRET"]
end

不能像这样重复:

 Rails.application.middleware.use OmniAuth::Builder do
  provider :twitter, ENV["TWITTER_KEY"], ENV["TWITTER_SECRET"]
end
Rails.application.middleware.use OmniAuth::Builder do
  provider :twitter, ENV["TWITTERUSER_KEY"], ENV["TWITTERUSER_SECRET"]
end

因为无法区分使用哪个回调。我没有找到一种方法来提供提供者':twitter2',例如因为它内置于Omniauth。

有没有人找到在同一个应用程序中使用多个Twitter回调的解决方案?很高兴看到任何需要两次用于不同目的的Oauth解决方案,例如Facebook或Google Plus

谢谢!

2 个答案:

答案 0 :(得分:0)

如果你想在两个用例中使用omniauth,你可能无法在没有重大覆盖的情况下执行此操作,因为它们会发生冲突。您是否考虑使用不同的Twitter gem来通过Twitter进行身份验证以发布推文?

答案 1 :(得分:0)

通过为提供者定义回调路径和名称,可以做到这一点。

Rails.application.middleware.use OmniAuth::Builder do
  provider :twitter, ENV["TWITTER_KEY"], ENV["TWITTER_SECRET"], callback_path: "/omniauth/twitter1/callback", name: "twitter1"
  provider :twitter, ENV["TWITTERUSER_KEY"], ENV["TWITTERUSER_SECRET"], callback_path: "/omniauth/twitter2/callback", name: "twitter2"
end

然后您使用该名称来呼叫一个或另一个提供商,例如www.mywonderfulwebsite.com/omniauth/twitter1

希望有所帮助