我知道Omniauth只是用于身份验证,它并不包含FB或Twitter工具。
但是,假设我的Rails 3应用程序使用Omniauth,现在我的系统中已经注册了一些用户。
我怎么才能张贴到他们的墙上?或者我还需要其他类型的授权系统吗?
感谢您的任何指示。
答案 0 :(得分:4)
我发现此链接允许我发布到Facebook和Twitter。非常好的教程:
http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3
答案 1 :(得分: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
现在数据库已准备好保存凭据,我们可以更改身份验证代码以填充字段。假设您将方法放在user.rb中,如RailsCast#236建议,然后打开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 Developer Documentation中几乎完美地描述。您将要安装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提供商合作将以几乎相同的方式工作,或者如果直接方法不如您所希望的那样,您可以安装特定的宝石与其API进行交互。
原帖的结尾