我知道 Omniauth 只是用于身份验证,它并没有真正包含 FB 或 Twitter 工具。
但是,假设我的 Rails 3 应用程序使用 Omniauth,我现在在我的系统中注册了一些用户。
然后我怎么能张贴到他们的墙上?还是我需要其他类型的授权系统?
感谢您的任何指示。
我知道 Omniauth 只是用于身份验证,它并没有真正包含 FB 或 Twitter 工具。
但是,假设我的 Rails 3 应用程序使用 Omniauth,我现在在我的系统中注册了一些用户。
然后我怎么能张贴到他们的墙上?还是我需要其他类型的授权系统?
感谢您的任何指示。
我找到了这个链接,它允许我在 Facebook 和 Twitter 上发帖。非常好的教程:
http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3
我在设置我的应用程序以连接到 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 进行交互。
原帖结束