目前,我正在与使用3版OAuth安全性的API进行通信。
对于通信,我每次都需要访问令牌。访问令牌自创建日期起有效期为1年。
我已将其存储在数据库(AccessToken类的序列化对象)中。
但在进行API调用时,我遇到了以下错误。 这是我的基本流程
1)获取access_token
<?php
if($login == 1) {
$price_after_discount = $product->product_price - (($product->product_price * (10+$product->product_discount) / 100));
?>
<span style="font-size: 17px;text-decoration: line-through;color: #ccc;"><em>$<?=$product->product_price?></em></span>
<span style="color: #5169a5;">$<?=$price_after_discount?></span><br>
<span class="label label-danger" style="padding: .2em .3em .2em;font-size: 70%;border-radius: 0;background-color: #e81f1f;position: absolute;top: 0;right: 0;font-family: roboto;">
off <?=$product->product_discount+10?>%
</span>
<?php }else{ ?>
<span>$<?=$product->product_price?></span>
<?php }?>
2)将access_token存储在数据库中
access_token_user.rb
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)
3)获取令牌并将其用于调用API
class AccessTokenUser < ActiveRecord::Base
belongs_to :user
serialize :access_token
end
atu = AccessTokenUser.create(user_id: 1, access_token: access_token)
在获取组织详细信息时,我收到以下错误
access_token = AccessTokenUser.find_by(user_id: 1).access_token
access_token.get('/organizations')
任何人都可以告诉我如何解决这个问题?
答案 0 :(得分:3)
序列化AccessToken
对象并将其写入数据库后,SSL会话不会保留。从数据库中检索访问令牌后,您可能需要重新初始化访问令牌。
序列化列通常用于散列和数组,而不是整个类。因此,您可能希望将access token verifier
存储在access_token_users
表中而不是access_token
本身,然后调用:
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')