В этой статье мы рассмотрим использование koa, облегченного фреймворка node.js, для создания и защиты спокойного API.

TL; DR - Где код!

  • предварительные условия: node.js >= 7.6, yarn, git
  • клонировать git repo git clone https://github.com/clintmod/koa-jwt-login-example.git
  • запустите yarn && yarn local, чтобы запустить nodemon
  • запустите команды curl в README.md на /register, /login, а затем используйте токен в заголовке для запроса к /api/v1
  • запустите yarn test, если хотите запустить тесты

Почему Коа?

Коа является преемником Экспресса. Сила Коа заключается в использовании async and await. Это заставляет асинхронный javascript читать и вести себя синхронно. Это позволяет нам одинаково синхронизировать и асинхронный код.

Давайте посмотрим на этот пример промежуточного программного обеспечения koa, чтобы понять, чем управление потоком через промежуточное программное обеспечение koa отличается от традиционных обратных вызовов или обещаний, которые используются в экспресс-приложении.

  1. Создайте дату для отслеживания продолжительности
  2. Ожидание управления до следующего промежуточного программного обеспечения
  3. Создайте другую дату, чтобы отслеживать время ответа
  4. Ожидание управления до следующего промежуточного программного обеспечения
  5. Подождите немедленно, поскольку contentLength работает только с ответами
  6. Ожидайте апстрима до промежуточного программного обеспечения Noop от Koa
  7. Игнорируйте установку тела, если путь не равен «/»
  8. Установите ответ на «Hello World»
  9. Игнорировать настройку Content-Length при отсутствии тела
  10. Установите поле
  11. Строка журнала вывода
  12. Установить поле заголовка X-Response-Time перед ответом

Вы можете увидеть, как поток намного более предсказуем и его легче читать, используя async и await.

Почему именно JWT?

Веб-токен JSON (JWT) - это токен аутентификации, который можно использовать для доступа к защищенным ресурсам. Любой сервер с доступом к секрету, который использовался для шифрования токена, может использоваться для проверки токена. Вы также можете встроить данные в токен. Данные в токене закодированы только в формате base64, поэтому не помещайте в токен конфиденциальную информацию.

Пример

Предпосылки

  • Node.js ≥ 7,6 brew install node
  • Баш с завитком или отдыхающим клиентом типа почтальон
  • Пряжа npm install -g yarn
  • Git brew install git

Настраивать

Вы можете клонировать git repo с помощьюgit clone https://github.com/clintmod/koa-jwt-login-example.git && cd koa-jwt-login-example

Затем запустите yarn && yarn local, чтобы запустить приложение с nodemon.

Тестирование приложения

Выполните команду ниже, чтобы зарегистрировать нового пользователя.

curl -X POST --data '{"username":"thedude", "password":"abides", "email":"[email protected]", "name":"Mr. Lebowski"}' http://localhost:9000/public/register

После регистрации выполните приведенную ниже команду, чтобы войти в систему как зарегистрированный пользователь, а затем скопируйте токен в буфер обмена.

curl -X POST --data 'curl -X POST -H "Content-Type: application/json" --data '{"username":"thedude", "password":"abides"}' http://localhost:9000/public/login

Теперь вы можете получить доступ к маршруту api/v1, заменив INSERT_TOKEN_HERE токеном из буфера обмена.

curl -X GET -H "Authorization: Bearer INSERT_TOKEN_HERE" http://localhost:9000/sacred

Проведение тестов

Для запуска тестов вы можете запустить yarn test. Если вы измените код, вы также можете запускать тесты в режиме просмотра с yarn test-mocha-watch.