【发布时间】:2016-09-21 03:26:23
【问题描述】:
目前,我正在与使用 3-legged OAuth 安全性的 API 进行通信。
为了通信,我每次都需要访问令牌。访问令牌自创建之日起有效期为 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 存入数据库
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) 获取令牌并使用它来调用 API
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>'
谁能告诉我如何解决这个问题?
【问题讨论】:
标签: ruby-on-rails oauth