2012-03-04 73 views
0

我正在使用Omniauth通過OAuth使用Twitter對用戶進行身份驗證(使用omniauth-twitter gem)。我打算允許普通用戶使用「讀取」權限進行登錄,並且只有在他們決定在網站內創建內容時授權「讀寫」權限。使用omniauth-twitter/twitter閱讀Twitter REST API的x-access-level標題Gem

在我的Identity模型中,我正在分析AuthHash omniauth傳遞給create_with_omniauth動作,並且爲每個提供者類型分別創建邏輯,以便我可以更深入地查看返回的哈希模式(如有必要)。

如果我輸入結構的raise auth.to_yaml,我看到我想讀的'x-access-level'標題,但我不知道如何查看response: Net::HTTPOK對象以便到達下一層的結構。

這是AUTH結構,切割出一些不必要的細節

--- !ruby/hash:OmniAuth::AuthHash 
provider: twitter 
... 
extra: !ruby/hash:Hashie::Mash 
    ... 
    access_token: !ruby/object:OAuth::AccessToken 
    ... 
    response: !ruby/object:Net::HTTPOK 
     http_version: '1.1' 
     code: '200' 
     message: OK 
     header: 
     x-access-level: 
     - read-write 
     x-ratelimit-limit: 
     - '350' 
     x-ratelimit-remaining: 
     - '348' 
     x-ratelimit-reset: 
     - '1330798604' 

到目前爲止,我可以得到的響應與auth["extra"]["access_token"].response但把.header末返回相同的響應結構,["header"]當我舉起它時,它是空的。

如果需要的話,我可以使用Twitter gem在Identity模型中執行verify_credentials調用(因爲Twitter會將x訪問級別標頭添加到每個響應中,但即使採用這種方法,我也不知道如何讀取返回的頭文件以讀取x-access-level頭文件

+0

你到底走哪條路? – 2013-01-11 18:00:47

+0

不幸的是,自從我問了以後,我沒有太多時間花在自己的項目上,但是omniauth-twitter gem的作者確實做了一些更改(可能在他的github回購中的某個分支上)嘗試使其運行。 IIRC我試過了,無法立即開始工作,但後來我沒有時間去處理它。 – dsample 2013-01-31 20:12:54

回答

0

我知道這不是同一個ruby twitter客戶端,但它可能會幫助其他人在使用ruby twitter客戶端(gem 「推特」)

所以從這個電話去:

twitter_client = Twitter::Client.new(:oauth_token => token, :oauth_token_secret => secret) 

twitter_client.verify_credentials 

這會給你只有用戶信息json。實際上,你可以得到Twitter的API響應,然後檢查包含在開頭

resp = twitter_client.get, "/1.1/account/verify_credentials.json" 
resp[:response_headers]["x-access-level"] # "read-write" in my case 

希望這有助於他人x-access-level ...