Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails 4中存储访问令牌对象_Ruby On Rails_Oauth - Fatal编程技术网

Ruby on rails 在rails 4中存储访问令牌对象

Ruby on rails 在rails 4中存储访问令牌对象,ruby-on-rails,oauth,Ruby On Rails,Oauth,您好,目前我在存储OAuth::AccessToken的对象时遇到了一个问题。首先让我描述一下情况 我正在开发rails 4应用程序,我正在使用另一个站点的API,比如example.com,它使用三条腿的oauth授权(与相同)。为了实现这个功能,我使用了这个,并实现了相同的功能 现在我可以打开example.com和我的应用程序之间的通信通道,也可以使用它们的API 这是我的示例实现 创建消费者 consumer = OAuth::Consumer.new API_KEY,

您好,目前我在存储OAuth::AccessToken的对象时遇到了一个问题。首先让我描述一下情况

我正在开发rails 4应用程序,我正在使用另一个站点的API,比如example.com,它使用三条腿的oauth授权(与相同)。为了实现这个功能,我使用了这个,并实现了相同的功能

现在我可以打开example.com和我的应用程序之间的通信通道,也可以使用它们的API

这是我的示例实现

创建消费者

consumer = OAuth::Consumer.new API_KEY,
                               API_SECRET,
                               {
                                 site: SITE_URL,
                                 header: { ACCEPT_HEADERS },
                                 http_method: :get,
                                 request_token_url: request_token_uri,
                                 access_token_url: access_token_uri,
                                 authorize_url: authorizerequest_token_uri
                               }
获取请求令牌

request_token = consumer.get_request_token({}, CALLBACK_URL)
access_token = request_token.get_access_token(oauth_verifier: verifier)
encrypt_access_token = Marshal.dump(access_token)
AccessTokenUser.create(user_id: 1, access_token: encrypt_access_token)
转到授权url并获取访问令牌验证程序“

request_token.authorize_url
verifier = gets.chomp
获取访问令牌

access_token = request_token.get_access_token(oauth_verifier: verifier)
现在我在整个应用程序中使用这个访问令牌(OAuth::AccessToken的对象)。(用于进行get、post API调用)。由于必须在应用程序中使用,我已将此对象存储到会话中

session[:access_token] = access_token 
但有时我会遇到cookie溢出错误。因此,我有以下疑问

  • 存储此对象的好方法是什么?(DB除外)
  • 我应该实现中间件吗
  • 或者是否有其他方法可以实现相同类型的功能

您可以尝试不同的会话存储机制,例如memcached或redis(在服务器上)。这可能会允许更大的会话。然而,这只是“实现不同类型的数据库”


如果您勇敢或愚蠢,您也可以尝试压缩数据或将其直接存储在加密的cookie中,或将其拆分为多个块并存储在单独的cookie中,但所有这些都是黑客行为,最好的答案是实现db后端或升级会话存储。:)

我也遇到了同样的问题。我已经将访问令牌存储在数据库中(我使用的是mysql数据库)。为此,我使用了ruby类

从医生那里

封送处理库将Ruby对象的集合转换为 字节流,允许它们存储在当前活动的 剧本随后可读取该数据并将原始对象 重组的

这是我存储访问令牌的示例代码

request_token = consumer.get_request_token({}, CALLBACK_URL)
access_token = request_token.get_access_token(oauth_verifier: verifier)
encrypt_access_token = Marshal.dump(access_token)
AccessTokenUser.create(user_id: 1, access_token: encrypt_access_token)
检索存储的访问令牌

decrypt_access_token = Marshal.load(access_token)

然后可以使用此解密的访问令牌进行API调用。

访问令牌有多少字节长?为什么不使用DB?您必须将此数据存储在某个位置。
Marshal
不会加密访问令牌。它只是将其转换为字节流。