2016-05-24 11 views
11

Derzeit kommunizieren ich mit der API, die dreibeinige OAuth-Sicherheit verwendet.Getting "RuntimeError: SSL-Sitzung wurde nicht initialisiert" Fehler rails

Für die Kommunikation brauche ich jedes Mal Zugriffstoken. Access Token ist ab dem Erstellungsdatum für 1 Jahr gültig.

Ich habe es in der Datenbank gespeichert (serialisiertes Objekt der AccessToken-Klasse).

Aber während API-Aufruf bekomme ich folgenden Fehler. Hier ist meine Grundströmung

1) Holen Sie sich das 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) Bewahren Sie die access_token in Datenbank

access_token_user.rb

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

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

3) Holen Sie das Token und uns für den Aufruf von A PI

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

access_token.get('/organizations') 

Während die Organisationen Detail Holen ich folgende Fehler bekommen

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>' 

Kann mir jemand mitteilen, wie kann ich dieses Problem beheben?

Antwort

3

Die SSL-Sitzung wird nicht beibehalten, nachdem Sie das Objekt AccessToken serialisiert und in Ihre Datenbank geschrieben haben. Möglicherweise müssen Sie das Zugriffstoken erneut initialisieren, nachdem Sie es aus der Datenbank abgerufen haben.

Serialisierte Spalten werden normalerweise für Hashes und Arrays verwendet, nicht für ganze Klassen. So ermitteln Sie den access token verifier in der access_token_users Tabelle anstelle des access_token selbst speichern möchten, dann rufen:

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

wir nicht Verifizierer mehrfach verwenden können. –

+0

hat Ihre Lösung versucht, aber den Fehler "OAuth :: Unauthorized: 400 Bad Request" erhalten. –

+0

Ohne einen vollständigen Backtrace und den zugehörigen Code zu sehen, ist es schwierig zu debuggen. Jetzt erhalten Sie einen 400-Fehler anstelle von RuntimeError: SSL-Sitzung wurde nicht initialisiert, so dass der Fehler wahrscheinlich von der API kommt, mit der Sie eine Verbindung herstellen. Sie sollten die Dokumentation dieser API überprüfen und ermitteln, warum sie 400 zurückgibt. – Jarred

Verwandte Themen