2012-06-27 43 views
0

當前的Facebook狀態正如你可能已經從標題猜到了,我試圖用OmniAuth讓我的用戶當前的Facebook狀態(一個新的可選功能)。我已經將必要的範圍選項傳遞給了omniauth初始化程序中的提供者方法。我知道這是一口,對不起。此代碼應幫助:抓取用戶與OmniAuth和Rails的

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, ENV['FACEBOOK_ID'], ENV['FACEBOOK_SECRET'], { scope: 'user_status' } 
end 

我知道,部分作品,因爲OAuth的對話中,Facebook的提示用戶允許訪問的狀態信息。所以,問題是我期待在驗證哈希要返回自己的狀態,與用戶信息的其餘部分,但它只是不存在。

def callback 
    raise request.env['omniauth.auth'].to_yaml 
end 

是的,那是過於簡單化了,但我想你不關心我before_filters等

我周圍一派約2小時,現在,所有這一切,我發現的例子是真做作。涵蓋範圍的那些只提到如何請求許可,但不知道如何真正得到的數據。

a similar unanswered question這裏如此,但它是如此古老,我不認爲這是復活是個好主意。

我很感激任何幫助。謝謝!


7月3日更新:

感謝您的幫助!我已經採取了你的建議,並使用來自AUTH散列令牌請求,像這樣的用戶的當前狀態:

FbGraph::User.me(@auth[:credentials][:token]).posts.first.message 

對於未來的讀者:需要注意的是令牌在約2個月時間到期是很重要的,並且每次用戶更改密碼。您可以希望當他們的令牌接近到期時通知用戶。從我可以在FB文檔中搜集的內容,到期日期以Unix時間戳的形式表示。您可以在轉換到更有用的東西像一個的Ruby的DateTime像這樣:

expires_at = Time.at(@auth[:credentials][:expires_at]).to_datetime 

然後,您可以保存令牌模型,並呼籲過去?它,以確保您的應用程序不嘗試使用無效的令牌。

do_something unless expires_at.past? 
+0

嗨,我有同樣的問題。試圖去通過FBK權限參考http://developers.facebook.com/docs/authentication/permissions/(下user_status)。還沒有運氣! – Hishalv

回答

2

當您設置user_status許可(和用戶批准的話),Facebook的補助:

api = Koala::Facebook::API.new(auth.credentials.token) 
api.get_connections('me', 'statuses').first 

您可以使用圖表資源管理器檢查您的應用程序訪問權限來讀取該用戶的狀態消息。在身份驗證過程中不會返回用戶狀態消息,您必須發出單獨的呼叫才能檢索用戶的狀態更新。

您的應用程序獲准後,您可以使用寶石像fb_graph使後續請求到Facebook。這裏有一個如何你可以用OmniAuth整合這樣一個例子:

user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"]) 
user.fetch 

,你可以利用將koalaoauth2其他寶石。使用oauth2 w/Facebook的Here's an example