Rails アプリでomniauth-coinbaseとcoinbase-rubyを使用しています。
私のアプリでは、ユーザーは Coinbase を介してログインし、 を生成しcode
てから と に変換しaccess_token
ます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)
ここから問題が始まります。
access_token
User モデルにとを文字列として保存しているrefresh_token
ので、ユーザーが戻ってきたときに、2 つのアクティブなトークンを使用するか、を使用しrefresh_token
て 2 つの新しいトークンを生成できます。これについては、セクション「アクセス トークンとリフレッシュ トークン」で説明しています。
Coinbase は、2 つの新しいトークンを提供するOAuth インスタンスでrefresh!
呼び出すことができるメソッドを公開します。coinbase
refresh!
新しい OAuth クライアントを生成した後は正しく動作しますが、ユーザー モデルからデータベースから既存のトークン (有効または無効) をプルし、上記のようにハッシュを作成し、新しい OAuth クライアントをインスタンス化してから呼び出すと正しく動作しません。user_credentials
refresh!
私の研究から理解しているように、access_token
有効期限が切れます。newと new のrefresh_token
両方を取得するために、 when を使用します。したがって、私の考えでは、新しい OAuth クライアントをインスタンス化し、両方のキーを与え、a を実行して正常な状態に戻し、Coinbase API への有効な呼び出しを行うことができるはずです。access_token
refresh_token
refresh!
私が間違っているかもしれないことについて、誰かがここで助けてくれますか? ありがとう!
私が得るエラー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>'