5

gem{"error" : 401}を使用して ruby​​ で Reddit に OAuth しようとすると、取得し続けます。oauth2wikiページには、これは資格情報が正しくないか存在しないことが原因であると書かれていますが、私は正しい資格情報を持っていると確信しています:

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
4

2 に答える 2

2

Oauth2::Client のサイト オプションは「https://ssl.reddit.com/api/v1/」である必要があります。ここで omniauth-reddit クライアント オプションを確認してください https://github.com/jackdempsey/omniauth-reddit/blob/master/lib/omniauth/strategies/reddit.rb

于 2014-02-22T20:48:41.280 に答える
0

しばらく経ち、コードがなくなってからしばらく経過しているため、現在診断する方法はありません。私の推測では、reddit の OAuth2 フレームワークのかなり緩い実装に関係していると思われます。

それにもかかわらず、Ruby を使用していて、OAuth2 経由で reddit に接続したい場合は、 redd を参照することをお勧めします

于 2015-05-06T22:49:40.177 に答える