2016-05-24 9 views
11

現在、私は3-legged OAuthセキュリティを使用するAPIと通信しています。「RuntimeError:SSLセッションが初期化されていません」エラー・レール

通信に関しては、毎回アクセストークンが必要です。アクセストークンは作成日から1年間有効です。

私はデータベース(AccessTokenクラスのシリアライズされたオブジェクト)に保存しました。

API呼び出し中に、次のエラーが発生しています。 は、ここに私の基本的な流れ

1)を取得access_tokenは

consumer = OAuth::Consumer.new API_KEY, 
    API_SECRET, 
    { 
    site: 'https://example.com', 
    header: { Accept: 'application/nd.v3+json' }, 
    http_method: :get, 
    request_token_url: @request_token_uri, 
    access_token_url: @access_token_uri, 
    authorize_url: @authorizerequest_token_uri 
    } 

    puts '***** Fetching request token *****' 
    request_token = consumer.get_request_token({}, 'oob') 
    puts "Request Token received - #{request_token.token}" 
    puts 
    puts 'Goto to url mentioned below to authorize. Paste the access token verifier' 
    puts request_token.authorize_url 

    verifier = gets.chomp 
    puts 
    puts 
    puts '***** Fetching access token *****' 
    access_token = request_token.get_access_token(oauth_verifier: verifier) 

2)データベース内access_tokenは保管し

class AccessTokenUser < ActiveRecord::Base 
    belongs_to :user 
    serialize :access_token 
    end 

    atu = AccessTokenUser.create(user_id: 1, access_token: access_token) 

3 access_token_user.rb)でありますトークンを取得し、Aを呼び出すためにそれを私たちにPI

access_token = AccessTokenUser.find_by(user_id: 1).access_token 

access_token.get('/organizations') 

組織の詳細をフェッチしながら、誰もが私はその問題を解決する方法を知っていることができます私は、次のようなエラーに

RuntimeError: SSL Session wasn't initialized. 
     from /home/test/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/net/http.rb:916:in `time' 
     from /home/test/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/net/http.rb:916:in `connect' 
     from /home/test/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/net/http.rb:862:in `do_start' 
     from /home/test/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/net/http.rb:851:in `start' 
     from /home/test/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/net/http.rb:1373:in `request' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/oauth-0.4.7/lib/oauth/consumer.rb:161:in `request' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/oauth-0.4.7/lib/oauth/tokens/consumer_token.rb:25:in `request' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/oauth-0.4.7/lib/oauth/tokens/access_token.rb:12:in `request' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/oauth-0.4.7/lib/oauth/tokens/access_token.rb:27:in `get' 
     from (irb):18 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.0.13/lib/rails/commands/console.rb:90:in `start' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.0.13/lib/rails/commands/console.rb:9:in `start' 
     from /home/test/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.0.13/lib/rails/commands.rb:62:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

を取得していますか?

答えて

3

AccessTokenオブジェクトをシリアル化してデータベースに書き込むと、SSLセッションが維持されません。アクセストークンをデータベースから取得した後、アクセストークンを再初期化する必要があります。

シリアライズされた列は、通常、クラス全体ではなくハッシュや配列に使用されます。あなたの代わりにaccess_token自体のaccess_token_usersテーブルにaccess token verifierを保存することもできますので、その後、呼び出し:

verifier = AccessTokenUser.find_by(user_id: 1).verifier 
request_token = consumer.get_request_token({}, 'oob') 
access_token = request_token.get_access_token(oauth_verifier: verifier) 
access_token.get('/organizations') 
+0

我々は、検証を複数回使用することはできません。 –

+0

あなたの解決策を試しましたが、 'OAuth :: Unauthorized:400 Bad Request'エラーが発生しました。 –

+0

完全なバックトレースと付随するコードを見ることなく、デバッグするのは難しいです。ただし、RuntimeErrorの代わりに400エラーが発生しました.SSLセッションが初期化されていないため、接続先のAPIからエラーが発生する可能性があります。そのAPIのドキュメントをチェックして、それが400を返す理由を判断する必要があります。 – Jarred

関連する問題