2016-05-24 26 views
11

Hiện tại, tôi đang liên lạc với API sử dụng bảo mật OAuth 3 chân.Lỗi đường dẫn "RuntimeError: SSL Session không được khởi tạo"

Để liên lạc, tôi cần mã thông báo truy cập mỗi lần. Mã thông báo truy cập có giá trị trong 1 năm kể từ ngày tạo.

Tôi đã lưu trữ nó trong cơ sở dữ liệu (đối tượng được tuần tự hóa của lớp AccessToken).

Nhưng trong khi thực hiện cuộc gọi API, tôi nhận được lỗi sau. Đây là dòng chảy của tôi cơ bản

1) Lấy 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) Lưu trữ các access_token trong cơ sở dữ liệu

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) Tìm nạp mã thông báo và cho chúng tôi để gọi A PI

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

access_token.get('/organizations') 

Trong khi lấy các chi tiết tổ chức Tôi nhận được lỗi sau

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

bất cứ ai có thể cho tôi biết làm thế nào tôi có thể khắc phục vấn đề đó?

Trả lời

3

Phiên SSL không được duy trì khi bạn tuần tự hóa đối tượng AccessToken và ghi nó vào cơ sở dữ liệu của bạn. Bạn có thể cần phải khởi tạo lại mã thông báo truy cập sau khi truy xuất nó từ cơ sở dữ liệu.

Các cột được tuần tự hóa thường được sử dụng cho băm và mảng, không phải toàn bộ các lớp. Vì vậy, bạn có thể muốn để lưu trữ các access token verifier trong access_token_users bảng thay vì access_token bản thân, sau đó gọi:

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

chúng ta không thể sử dụng xác minh nhiều lần. –

+0

đã thử giải pháp của bạn nhưng nhận được lỗi "OAuth :: Không được phép: 400 yêu cầu không hợp lệ". –

+0

Nếu không nhìn thấy một backtrace đầy đủ và mã đi kèm, rất khó để gỡ lỗi. Tuy nhiên, hiện tại bạn đang gặp phải lỗi 400 thay vì RuntimeError: Phiên SSL không được khởi tạo, do đó lỗi có khả năng đến từ API bạn đang kết nối. Bạn nên kiểm tra tài liệu của API đó và xác định lý do tại sao nó quay trở lại 400. – Jarred

Các vấn đề liên quan