В этой статье мы рассмотрим использование 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 отличается от традиционных обратных вызовов или обещаний, которые используются в экспресс-приложении.
- Создайте дату для отслеживания продолжительности
- Ожидание управления до следующего промежуточного программного обеспечения
- Создайте другую дату, чтобы отслеживать время ответа
- Ожидание управления до следующего промежуточного программного обеспечения
- Подождите немедленно, поскольку
contentLength
работает только с ответами - Ожидайте апстрима до промежуточного программного обеспечения Noop от Koa
- Игнорируйте установку тела, если путь не равен «/»
- Установите ответ на «Hello World»
- Игнорировать настройку
Content-Length
при отсутствии тела - Установите поле
- Строка журнала вывода
- Установить поле заголовка
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
.