2012-05-28 143 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 
相关问题