1

OAuth2.0 を使用して Elance API を使用するように node.js アプリケーションをセットアップしようとしています。passport.js を使用して elance API に接続していますが、これまでのところコードを正しく取得できています。API メソッドを使用する前に、post request を使用してリクエスト トークンを取得する必要があります。

ただし、「コードは既に使用されています」というエラーが表示されます。これが私のコールバックコードです

app.get('/callback', 
  passport.authenticate('elance', { failureRedirect: '/failure' }),
  function(req, res) {
    console.log('CODE : ' + req.query.code); // this is getting displayed properly
 var payload = {
    code: req.query.code,
    grant_type:'authorization_code',
    client_id: auth.CLIENT_ID,
    client_secret: auth.CLIENT_SECRET
  };

request.post('https://api.elance.com/api2/oauth/token/', payload)
   .then(function(response) {
        var x = response.getBody();
        console.log('resp::::'+x);
        res.redirect('/success');
    });
});

requestifyを使用してポスト リクエストを実行していますが、一時コードでサーバーを使用または呼び出していません。生成されたエラーは次のとおりです。

... [Sat, 29 Mar 2014 05:54:15 GMT] "GET /callback?code=F9t-zztOLJ3IOlbGXlsqous686HstXqkv7etrvEnF11Vg4M HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:30.0) Gecko/20100101 Firefox/30.0"
InternalOAuthError: Failed to obtain access token (status: 401 data: {"errors":[{"code":null,"description":"Code already used."}]})
4

3 に答える 3

0

以下は、トークンを受け取るために重要と思われるポイントです。

  1. content-type と Content-Length の正しい値を設定します。
  2. リクエストは HTTPS リクエストである必要があります。
  3. メソッドは POST である必要があります。
  4. また、サーバーによる非セキュアな呼び出しが原因で発生する問題を回避するために、Open SSL をインストールして使用しました。
  5. 上記の #1 で説明した同一のヘッダー情報を設定した場合でも、Requestify を使用して行われた呼び出しは毎回失敗していました。添付のスクリーンショットに示されているように、通常の https リクエスト呼び出しで問題なく動作します。

後続のクエリからの JSON 応答は、次のコードから取得されました。

var request = require("request");
var jobURL = 'https://api.elance.com/api2/jobs/my?access_token=' + _token;

request(jobURL, function (error, response, body) {
    res.write(body);
    res.end();
});
于 2014-06-30T06:37:47.537 に答える