2016-04-25 82 views
0

我正在做我在nodejs上的第一个测试应用程序。这很简单。从API获取数据并将其显示在浏览器中。以下是我遵循的步骤。nodejs oauth2需要令牌重建帮助

  1. 我使用express for web和获取api结果的请求。
  2. 首先,我使用Oauth2 Client凭证方法从api服务器请求一个令牌。
  3. 我得到一个令牌并将其传递给资源url并获得结果。
  4. 使用pug(是Jade)teplate引擎将其显示到浏览器。

    var express = require('express'); var tools = require('./ tools'); var app = express(); var request = require('request'); app.set('view engine','pug');

    //获取令牌密钥 tools.generateToken(功能(响应){ 标记=响应; });

    //索引页路由 app.get( '/',函数(REQ,RES){ //res.send('Hello世界 '+令牌); VAR请求=需要(' 请求“) ;! 请求( '?URL =的access_token' +令牌+” & N = 10 & PGNO = 2' ,函数(误差,响应,体){ 如果(误差& & response.statusCode == 200){

    res.render('index', { layout : 'layout', json: JSON.parse(body) }); 
        } 
    
    }) 
    

    });

    VAR服务器= app.listen(3000,函数(){

    变种宿主= server.address()。解决 变种端口= server.address()。端口

    的console.log(“例应用在听http://%s:%s”,主机,端口)

    })

一切似乎都工作良好。但一旦令牌过期,我无法检索到任何结果(很明显)。但我不知道什么时候获得新的令牌。我应该何时回忆令牌生成功能?

也有没有一种方法来跟踪API浏览器刷新数据的变化?请帮忙。由于

+0

提供对资源的访问需要身份验证应具有权威性的中间件任何途径,这是在那里您会检查令牌的有效性,并在令牌合法时允许请求通过。通常情况下,您会在此处更新您的数据库/缓存中令牌的到期时间戳,以防止出现您的情况。 –

回答

0

您可以使用reqclient,这是对的request,让您自动处理的OAuth2令牌刷新过程,因此,如果OAuth2用户服务器让你在同一个响应的到期时间顶部有一个小客户端库,reqclient会知道什么时候它必须要求一个新的没有任何干预。

也有其他不错的功能,如卷曲记录知道请求是如何制造的,无极对象来处理的响应,等等。它也可以与npm安装。

这是如何创建一个RequestClient对象来处理对一个API请求的示例,并且还告诉给谁是OAuth2用户服务器的模块,有什么凭据获得令牌:

var client = new RequestClient({ 
    baseUrl: "https://api.example.com/myapi" 
    ,debugRequest:true, debugResponse:true // (optional) this activate curl logging 
    ,oauth2: { 
    baseUrl: 'https://auth.example.com/oauth2' 
    ,auth: { 
     user: 'client123'  // The username, also called "client_id" 
     ,pass: 'thePass123'  // The password, also called "client_secret" 
    } 
    } 
}); 

client.get("home-reports")  // First will try to login with OAuth2, then /home-reports 
.then(client.get("messages")); // Will reuse the previous token obtained if it's not expired yet, otherwise it will request a new one first 

这两个请求都会返回Promise对象,因此您必须使用thencatch来处理它们。总之,由于记录与debugRequest:true, debugResponse:true(可选)激活,所有的请求和响应将被记录whithin这样控制台:

[Requesting token]-> -X POST https://auth.example.com/oauth2/token -u ${CLIENT_ID}:${CLIENT_SECRET} -d 'grant_type=client_credentials' 
[Response token]<- Status 200 - {"token_type":"bearer","access_token":"AAsdsAdggT5c0EkLng4yBEwght3bfDGf47hbSk3","expires_in":3456543} 
[Requesting home-reports]-> https://api.example.com/myapi/home-reports -H "Authorization: Bearer ${ACCESS_TOKEN}" 
[Response home-reports]<- Status 200 - {"sales":53434.53,"purchases":12984.04} 
[Requesting messages]-> https://api.example.com/myapi/messages -H "Authorization: Bearer ${ACCESS_TOKEN}" 
[Response messages]<- Status 200 - {"messages":[]}