2016-04-25 6 views
0

Я делаю свое первое тестовое приложение на nodejs. Это очень просто. Извлечь данные из api и отобразить их в браузере. Вот шаги, которые я последовал.nodejs oauth2 нужна регенерация токена

  1. Я использую экспресс для Интернета и запрос на получение результатов api.
  2. Сначала я запрашиваю токен с сервера api с использованием метода учетных данных клиента Oauth2.
  3. Я получаю токен и передаю его URL-адресу ресурса и получаю результаты.
  4. Отобразите его в браузере, используя мотающий двигатель (был Jade).

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

    // Получить маркер ключа tools.generateToken (функция (ответ) { маркер = ответа; });

    // Указатель Page маршрутизации app.get ('/', функция (Req, Рез) { //res.send('Hello World '+ маркер); запрос вар = требуется (' запрос ') ;! запрос ('? URL-access_token =' + маркер + & п = 10 = & PGNO 2' , функция (ошибка, ответ, тело) { , если (ошибка & & response.statusCode == 200) {

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

    )

    вар сервер = app.listen (3000, функция() {

    вар хост = server.address(). Адрес уаг порт = server.address). Порт (

    console.log ("Пример приложения прослушивание в http://%s:%s», хост, порт)

    })

Все, кажется, работает хорошо. Но как только токен истек, я не могу получить никаких результатов (это очевидно). Но я не знаю, когда взять новый токен. Когда следует вспомнить функцию генерации токена?

Также есть способ отслеживать изменения данных api без обновления браузера? Пожалуйста помоги. Благодаря

+0

любой маршрут, который обеспечивает доступ к ресурсу, который требует аутентификации должен иметь аутентификации промежуточное программное обеспечение, это где вы должны проверить действительность токена и разрешить запрос, если токен является законным. Как правило, вы обновляете отметку срока действия токена в вашем db/cache здесь, чтобы предотвратить вашу ситуацию. –

ответ

0

Вы можете использовать reqclient, это небольшой клиент библиотека поверх request, которые позволяют автоматически обрабатывать маркер процесс обновления OAuth2, так что если сервер OAuth2 дает время истечения срока действия в том же ответ reqclient будет знать, когда он должен запросить новый без какого-либо вмешательства.

Также есть и другие полезные свойства, такие как Curl протоколирование, чтобы узнать, как делаются запросы, Promise объектов для обработки ответов и т.д. Это также доступно для установки с 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 объектов, поэтому вам нужно обращаться с then и catch, что с ними делать. Во всяком случае, так как регистрация была активирована с 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":[]}