2012-05-28 69 views
1

我正在使用OmniAuth通過Github驗證用戶身份。 OmniAuth提供訪問令牌。現在我想發送GET或POST請求給Github。我不想使用任何寶石,我想用Net :: HTTP。我這樣做是這樣的:如何使用訪問令牌在Github上使用GET和POST?

<%consumer = OAuth::Consumer.new("mshsD0jpgcYwwOEcTW5ZTA", "V6KTqllY5jS392pj4FNFCb5EiOM8DaFzVwr9cS54XQ", { :site => "https://api.github.com", :request_token_path => '/oauth/request_token', :access_token_path => '/oauth/access_token', :authorize_path => '/oauth/authorize', :scheme => :header })%> 

<%access_token = OAuth::AccessToken.new(consumer,auth.token,auth.secret)%> 

我以前做了Twitter的工作得很好,但現在我收到以下錯誤相同:

uninitialized constant ActionView::CompiledTemplates::OAuth 

即使在同一個應用程序同樣的事情正在爲Twitter的但不適用於Github。

我通過Google搜索,但沒有找到任何幫助。

+1

您可以嘗試使用頂級命名空間?將'::'預先加入'OAuth',所以寫':: OAuth :: Consumer.new'而不是'OAuth :: Consumer.new'。 – shime

+0

@shime我試過了,但最終得到「未初始化的常量OAuth」這個錯誤 – santosh

回答

3

您應該使用OAuth2而不是OAuth。我實際上推薦使用Octokit,它很容易使用,而Wynn現在可以爲GitHub工作,所以他的工作就是保持最新狀態。 :)

如果你想使用Net :: HTTP(雖然我無法想象爲什麼),但你實際上可以做到這一點,沒有任何寶石。只需將您從OmniAuth獲得的令牌放入請求的「身份驗證」標頭即可。

require 'net/https' 
require 'uri' 

uri = uri = URI.parse("https://api.github.com/users/username") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 

headers = { "Authentication" => "token" } 
request = Net::HTTP::Get.new(uri.request_uri, headers) 
response = http.request(request) 
response.body # => A string containing the JSON response 
相關問題