2015-10-05 55 views
0

因此,我試圖讓我的應用的用戶使用Instagram登錄,然後使用他們的access_token來執行對Instagram API的請求。用於Instagram認證的Rails控制器中的發佈請求

我看了一個omniauth-instagram軌道寶石,但它似乎並沒有像訪問令牌一樣工作,我似乎無法發送重定向uri。

所以,現在我試圖自己做這個授權,以omniauth寶石爲例。到目前爲止,我有一個鏈接到Instagram的API在我的html:<a href="https://api.instagram.com/oauth/authorize/?client_id= <%=ENV["INSTAGRAM_KEY"]%>&redirect_uri=<%= "http://localhost:3000/auth/instagram/request_token" %>&response_type=code">Instagram</a>

重定向-URI再談到這個方法:

def request_token 
    @code = params[:code] 
    uri = URI.parse('https://api.instagram.com/oauth/access_token') 
    http = Net::HTTP.new(uri.host, uri.port) 
    request = Net::HTTP::Post.new(uri.request_uri) 
    request.set_form_data({ 
     "client_id" => ENV["INSTAGRAM_KEY"], 
     "client_secret" => ENV["INSTAGRAM_SECRET"], 
     "grant_type" => "authorization_code", 
     "redirect_uri" => "http://localhost:3000/auth/instagram/access", 
     "code" => @code 
     })  
    end 

我需要網/ HTTPS。仍然會發生的唯一情況是顯示與request_token相關聯的視圖。 http請求似乎沒有發生任何事情。我很新使用net/http。我錯過的東西可能非常明顯,但我只是看不到它。一些幫助將非常感激。

回答

0

您已經設置了請求,但現在您需要執行該請求。你用Net::HTTP.start來做到這一點。這裏有一個例子來自the documentation

uri = URI('http://www.example.com/todo.cgi') 
req = Net::HTTP::Post.new(uri) 
req.set_form_data('from' => '2005-01-01', 'to' => '2005-03-31') 

res = Net::HTTP.start(uri.hostname, uri.port) do |http| 
    http.request(req) 
end 

case res 
when Net::HTTPSuccess, Net::HTTPRedirection 
    # OK 
else 
    res.value 
end 

許多人發現Net::HTTP不必要的巴洛克式的,所以你也可以考慮一些HTTP寶石像FaradayHTTParty,具有更簡潔的API。繼續使用Net::HTTP,您可能會發現這個cheat sheet方便。