2013-11-02 8 views
5

Ich bekomme {"error" : 401} beim Versuch, OAuth in Reddit auf Ruby mit dem oauth2 Juwel. Die Wiki-Seite sagt, dass dies aufgrund von falschen oder nicht vorhandenen Anmeldeinformationen ist, aber ich bin sicher, ich die korrekten haben:Erhalten eines 401-Fehlercodes bei Verwendung von OAuth mit Reddit

require "oauth2" 
require "base64" 

reddit = OAuth2::Client.new ENV["API_ID"], ENV["API_SECRET"], \ 
    :authorize_url => "https://ssl.reddit.com/api/v1/authorize", 
    :token_url  => "https://ssl.reddit.com/api/v1/access_token", 
    :site   => "https://oauth.reddit.com/api/v1/" 

state = Digest::SHA1.hexdigest rand(36**8).to_s(36) 
redirect_uri = "http://localhost:8080/oauth2/callback" 

params = {"scope" => "identity", 
      "response_type" => "code", 
      "redirect_uri" => redirect_uri, 
      "state" => state, 
      "duration" => "permanent" 
     } 

puts reddit.auth_code.authorize_url params 

# Get the url with the code that reddit redirects to 
redir = gets.chomp.strip 
code = redir.match(/code=([^&]*)/).captures 
returned_state = redir.match(/state=([^&]*)/).captures 
raise "State does not Match!" unless state === returned_state[0] 

params = {"scope" => "identity", 
      "redirect_uri" => redirect_uri, 
      "state" => state 
     } 

token = reddit.auth_code.get_token(code[0], params, :headers => {'Authorization' => "Basic " + Base64.strict_encode64('#{ENV["API_ID"]}:#{ENV["API_SECRET"]}')}) 
response = token.get('me') 
puts response 

Antwort

0

Es ist eine Weile her und der Code ist seit einer Weile weg, also gibt es keine Möglichkeit, es jetzt zu diagnostizieren. Ich vermute, dass Reddit eine ziemlich lockere Implementierung des OAuth2-Frameworks ist.

Wenn Sie jedoch Ruby verwenden und sich über OAuth2 mit Reddit verbinden möchten, sollten Sie vielleicht einen Blick auf redd werfen.