我在我的 Rails 应用程序中使用了 omniauth-coinbase和coinbase-ruby 。
在我的应用程序中,用户通过 Coinbase 登录,它生成 acode
然后我将其变成 anaccess_token
和 a refresh_token
。
然后我在变量下创建一个新的 OAuth 客户端coinbase
,它具有完整的功能。
user_credentials = {
:access_token => access_token,
:refresh_token => refresh_token,
:expires_at => Time.now + 1.day
}
coinbase = Coinbase::OAuthClient.new(ENV['COINBASE_CLIENT_ID'], ENV['COINBASE_CLIENT_SECRET'], user_credentials)
这是问题开始的地方:
我将 User 模型上的access_token
和存储refresh_token
为字符串,这样当用户回来时,我可以使用两个活动令牌或使用refresh_token
生成两个新令牌,如“访问令牌和刷新令牌”部分所述
Coinbase 公开了一个refresh!
我可以在我的coinbase
OAuth 实例上调用的方法,它应该给我两个新的令牌。
refresh!
在我生成一个新的 OAuth 客户端后正常工作,但当我从用户模型的数据库中提取现有令牌(有效或无效)、创建user_credentials
如上所述的哈希、实例化一个新的 OAuth 客户端,然后调用refresh!
它时不能正常工作。
据我的研究了解,access_token
过期了。我使用一个refresh_token
无论何时都获得一个新的access_token
和一个新的refresh_token
。所以在我看来,我应该能够实例化一个新的 OAuth 客户端,给它两个密钥并运行 arefresh!
以使我恢复正常工作并能够对 Coinbase API 进行有效调用。
任何人都可以在这里帮忙看看我可能做错了什么吗?谢谢!
我得到的错误refresh!
如下:
OAuth2::Error: invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
{"error":"invalid_request","error_description":"The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed."}
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/client.rb:113:in `request'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/client.rb:138:in `get_token'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/access_token.rb:86:in `refresh!'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/coinbase-2.0.0/lib/coinbase/oauth_client.rb:58:in `refresh!'
/Users/zackshapiro/dev/stopcoin/lib/tasks/short.rake:14:in `block (3 levels) in <top (required)>'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/Users/zackshapiro/dev/stopcoin/lib/tasks/short.rake:6:in `block (2 levels) in <top (required)>'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `eval'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `<main>'