2

Rails アプリでomniauth-coinbasecoinbase-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_tokenUser モデルにとを文字列として保存しているrefresh_tokenので、ユーザーが戻ってきたときに、2 つのアクティブなトークンを使用するか、を使用しrefresh_tokenて 2 つの新しいトークンを生成できます。これについては、セクションアクセス トークンとリフレッシュ トークン」で説明しています。

Coinbase は、2 つの新しいトークンを提供するOAuth インスタンスでrefresh!呼び出すことができるメソッドを公開します。coinbase

refresh!新しい OAuth クライアントを生成した後は正しく動作しますが、ユーザー モデルからデータベースから既存のトークン (有効または無効) をプルし、上記のようにハッシュを作成し、新しい OAuth クライアントをインスタンス化してから呼び出すと正しく動作しませんuser_credentialsrefresh!

私の研究から理解しているように、access_token有効期限が切れます。newと new のrefresh_token両方を取得するために、 when を使用します。したがって、私の考えでは、新しい OAuth クライアントをインスタンス化し、両方のキーを与え、a を実行して正常な状態に戻し、Coinbase API への有効な呼び出しを行うことができるはずです。access_tokenrefresh_tokenrefresh!

私が間違っているかもしれないことについて、誰かがここで助けてくれますか? ありがとう!

私が得るエラー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>'
4

2 に答える 2

0

このエラーを再現できません。Coinbase::OAuthClient.new を呼び出す前に、関連するすべての値を出力してみましたか? client_id、client_secret、および user_credentials がすべて存在し、正しいことを確認してください。

また、資格情報ハッシュを User モデルに直接シリアル化する方が簡単な場合があります。参照用に、 https://github.com/coinbase/coinbase-oauth-rails-exampleでサンプル Rails アプリを確認してください。

于 2014-06-04T04:39:13.053 に答える