6

我正在使用 OmniAuth + Devise 允许用户使用附加到普通用户帐户的 Facebook/Twitter/Gowalla/etc 进行注册。现在,当用户使用其中任何一个或他们的帐户登录时,他们所有的社交网络都附加在一个身份验证表中。

我需要能够从这些提供商中提取内容,例如他们的推文或他们的 Facebook 位置检查等。我知道我将需要使用不同的 gem、插件,无论做什么,但获得我需要的配置使用这些宝石(并提出请求)让我感到困惑。

我需要能够访问omniauth.rb 中的提供者配置项,所以我有API 密钥和秘密密钥等,然后我需要能够从oAuth 的东西中获取令牌来发出请求。

https://github.com/jrallison/authlogic_oauth等其他 gem似乎存储 oauth_token、oauth_secret 和 oauth_token,但 OmniAuth 没有。

正如您可能会说的那样,我对 Ruby、Rails 和 oAuth 非常陌生,因此这是一个非常具有挑战性的应用程序。非常需要帮助。

4

2 回答 2

20

排序!

在http://railscasts.com/episodes/236-omniauth-part-2中描述的身份验证表中添加了令牌和机密,但更改了 authentication.build 行以采用另外两个参数:

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

然后使用来自http://dev.twitter.com/pages/oauth_single_token#ruby的代码示例

class CronController < 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/home_timeline.json")

        render :json => response.body
    end
end

通过从 current_user.authentications 中提取内容(我找到了第一个,因为他们应该只有一个),我可以获取令牌和安全性,而且一切都很好。

现在我可以调整它,保存东西,使用 JSON 并获取我需要的东西。我相信 Facebook 会非常相似。

于 2010-11-16T23:58:41.777 回答
6

这是你要找的吗?http://railscasts.com/episodes/236-omniauth-part-2 :) 它展示了如何检索电子邮件等数据。不确定这是否是您要找的。

于 2010-11-16T15:11:02.883 回答