首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >令牌在获取访问令牌时已经使用了错误

令牌在获取访问令牌时已经使用了错误
EN

Stack Overflow用户
提问于 2014-03-29 06:03:56
回答 3查看 2K关注 0票数 1

我正在尝试设置一个node.js应用程序来使用Elance,使用OAuth2.0,我使用passport.js连接到elance,到目前为止能够正确地获得代码。在使用api方法之前,我需要获得使用post请求的请求令牌

但是,我得到了一个‘代码已经使用’错误。这是我的回拨代码

代码语言:javascript
复制
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');
    });
});

我使用请求来执行post请求,而不是使用临时代码使用/调用服务器。下面是生成的错误:

代码语言:javascript
复制
... [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."}]})
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-30 06:37:47

以下几点似乎是接收令牌的关键:

  1. 设置正确的内容类型和内容长度值。
  2. 请求应该是HTTPS请求。
  3. 方法应该是POST。
  4. 我还安装并使用了Open,以避免由于服务器发出非安全调用而引起的任何问题。
  5. 即使我设置了上面第1段中提到的相同的头信息,每次使用Requestify进行的调用都是失败的。在附带的屏幕截图中可以看到,它可以很好地处理普通的https请求调用。

来自后续查询的JSON响应来自以下代码:

代码语言:javascript
复制
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();
});
票数 0
EN

Stack Overflow用户

发布于 2014-04-01 00:46:37

用Elance实现这个功能的正确方法可能是编写一个strategy。只需使用像Facebook这样发布的其他模型之一,或者使用像GitHub这样更简单的模型。它应该相当简单,并且封装得更好。下面是一个完整的列表:如果您想探索的话,可以使用http://passportjs.org/。更好的是,让这个模块可重用,然后其他人可以以更标准的方式从它中获益。

策略将为您交换令牌的代码。可能是使用该代码的原因,而您得到了该错误。这是标准OAuth2流的一部分。

票数 1
EN

Stack Overflow用户

发布于 2014-06-26 17:14:29

我也遇到了同样的问题,为了解决这个问题,我不得不与Elance支持部门合作。发生此错误的原因是来自具有相同API键的多个线程/服务器的多个同时请求来自同一个用户。

在我的例子中,它是一个正在执行后台工作的服务器线程池,我们需要同步登录,所以它只发生了一次。多个线程可以重复使用相同的access_token,只是不应用代码,然后并行地应用access_token/refresh_token。

这也可能发生,因为您有多个人/构建服务器运行测试用例,这些测试用例要求代码,然后并行地使用access_tokens。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22727710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档