2016-05-24 16 views
11

Attualmente sto comunicando con l'API che utilizza la sicurezza OAuth a tre vie.Ottenere le notifiche di errore "RuntimeError: SSL Session non inizializzato"

Per la comunicazione, ho bisogno di accedere al token ogni volta. Il token di accesso è valido per 1 anno dalla data di creazione.

L'ho memorizzato nel database (oggetto serializzato della classe AccessToken).

Ma mentre faccio una chiamata API sto ricevendo errore. Ecco il mio flusso di base

1) Prendi l'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) Conservare l'access_token nel database

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) Prendi il token e noi per chiamare A PI

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

access_token.get('/organizations') 

durante il recupero dettaglio organizzazioni sto ottenendo seguente errore

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

Qualcuno può farmi sapere come posso risolvere questo problema?

risposta

3

La sessione SSL non viene mantenuta dopo aver serializzato l'oggetto AccessToken e averlo scritto nel database. Potrebbe essere necessario reinizializzare il token di accesso dopo averlo recuperato dal database.

Le colonne serializzate vengono solitamente utilizzate per hash e array, non per intere classi. Quindi si consiglia di conservare il access token verifier nella access_token_users tavolo al posto del access_token in sé, quindi chiamare:

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

non possiamo usare verificatore più volte. –

+0

ha provato la tua soluzione ma ha ricevuto l'errore 'OAuth :: Non autorizzato: 400 Bad Request'. –

+0

Senza vedere un backtrace completo e il codice di accompagnamento, è difficile eseguire il debug. Tuttavia, ora stai ricevendo un errore 400 invece di RuntimeError: SSL Session non è stato inizializzato, quindi è probabile che l'errore provenga dall'API a cui ti stai connettendo. È necessario controllare la documentazione di tale API e determinare il motivo per cui restituisce 400. – Jarred