0

我知道 Omniauth 只是用于身份验证,它并没有真正包含 FB 或 Twitter 工具。

但是,假设我的 Rails 3 应用程序使用 Omniauth,我现在在我的系统中注册了一些用户。

然后我怎么能张贴到他们的墙上?还是我需要其他类型的授权系统?

感谢您的任何指示。

4

2 回答 2

4

我找到了这个链接,它允许我在 Facebook 和 Twitter 上发帖。非常好的教程:

http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

于 2011-03-30T15:31:20.290 回答
1

我在设置我的应用程序以连接到 Twitter 时使用了本指南:

http://philsturgeon.co.uk/news/2010/11/using-omniauth-to-make-twitteroauth-api-requests

帮了我很多,希望它对你也一样。


原帖

发布时间:2010 年 11 月 16 日

使用出色的用户系统 gem Devise和名为OmniAuth的 gem,您可以制作一个 Rails 应用程序,通过 Twitter、Facebook、Gowalla 等轻松登录或注册用户。但是一旦用户登录,您如何代表刚刚授权的帐户实际与 API 交互?

本文从 RailsCasts 停止的地方开始,因此,如果您尚未启动并运行 Devise 和 OmniAuth,那么您可能需要观看:

所以,假设我们都快到第三个视频结束的时候了,我们都准备好了。我将使用 Twitter 的示例,但实际上任何使用 oAuth 的提供商都将使用相同的方法。就像在“过去的日子”中我们使用 Twitter 用户名和密码来验证 API 请求一样,我们现在使用访问令牌和令牌秘密。您可以将这些视为与验证 API 请求的目的基本相同的东西,对我们来说,它们是。

要获取令牌和机密,您需要在身份验证表中添加一些字段:

rails g migration AddTokenToAuthentications token:string secret:string
rake db:migrate

现在数据库已准备好保存凭据,我们可以更改身份验证代码以填充字段。假设您像 RailsCast #236 建议的那样将方法放在 user.rb 中,然后打开 user.rb 并修改以下行:

authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])

并将其替换为:

authentications.build(
  :provider => omniauth['provider'],
  :uid => omniauth['uid'],
  :token => omniauth['credentials']['token'],
  :secret => omniauth['credentials']['secret']
)

现在,每当有人验证他们的帐户时,我们都可以保存他们的凭据,这些凭据是从 OmniAuth 的内部隐藏魔法传回的。

下一步是使用这些保存的凭据实际发出一些请求,Twitter 开发人员文档中几乎完美地描述了这一点。您需要安装 oauth gem(将其放入您的 Gemfile 并运行 bundle install),然后您可以使用以下代码测试转储来自用户的推文列表:

class TwitterController < ApplicationController

    def recent_tweets
      # Exchange your oauth_token and oauth_token_secret for an AccessToken instance.

      def prepare_access_token(oauth_token, oauth_token_secret)
        consumer = OAuth::Consumer.new("APIKey", "APISecret"
            { :site => "http://api.twitter.com"
            })
        # now create the access token object from passed values
        token_hash = { :oauth_token => oauth_token,
                       :oauth_token_secret => oauth_token_secret
                     }
        access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
        return access_token
      end

      auth = current_user.authentications.find(:first, :conditions => { :provider => 'twitter' })

      # Exchange our oauth_token and oauth_token secret for the AccessToken instance.
      access_token = prepare_access_token(auth['token'], auth['secret'])

      # use the access token as an agent to get the home timeline
      response = access_token.request(:get, "http://api.twitter.com/1/statuses/user_timeline.json")

    render :json => response.body
  end
end

通过从 current_user.authentications 中提取内容(我在我的应用程序中找到第一个,他们应该只有一个),我可以获取凭据并拥有获取他们最近的推文、发布新推文、查看朋友推文等的完全权限。

现在我可以调整它,保存东西,使用 JSON 并获取我需要的东西。与 Facebook 或任何其他 oAuth 提供商合作将以几乎相同的方式工作,或者如果直接方法不像您希望的那样顺利,您可以安装特定的 gem 以与他们的 API 进行交互。

原帖结束

于 2011-02-08T09:35:00.093 回答