Использование стратегии паспорт-jwt.

Это пятая часть серии статей о ExpressJS.

Вы можете найти Часть 1 здесь. В нем рассказывается о создании базового экспресс-апи и настройке мокко для тестирования.

Вы можете найти Часть 2 здесь. В нем рассказывается о настройке PostgreSQL, продолжении для подключения экспресс-апи к базам данных.

Вы можете найти Часть 3 здесь. В нем говорится о создании ассоциаций (имеет множество, а также принадлежит) между двумя моделями.

Вы можете найти Часть 4 здесь. В нем говорится о настройке аутентификации пользователя на основе электронной почты и пароля.

Наш план атаки —

  • Когда мы логинимся — создаем и отправляем JWT в ответ
  • Когда мы попадаем на защищенный маршрут, JWT, отправленный как часть заголовка запроса, декодируется для извлечения информации о пользователе.
  • Несанкционированный запрос без JWT отклоняется со статусом 401.

Сначала разберемся с первым пунктом —

Обновить тесты для входа

Поскольку мы ожидаем получить токен после входа в систему, мы должны обновить наши тесты, чтобы убедиться в этом.

Мы ожидаем, что response.body будет объектом, содержащим токен, который мы можем использовать.

Создать и установить токен

Затем мы обновляем нашу стратегию passport-local, чтобы создавать и отправлять через JWT всякий раз, когда пользователь входит в систему.

Сначала устанавливаем пакет веб-токенов JSONnpm i jsonwebtoken

Затем мы переходим к нашему auth/index.js, где у нас есть логика обработки маршрута входа в систему.

Мы импортируем jsonwebtoken вверху файла.

Теперь мы можем использовать jwt для «подписания» токена.

Мы будем использовать электронную почту пользователя в качестве полезной нагрузки JWT.

Полезная нагрузка — это информация, которую мы хотим сохранить в токене, и она доступна после того, как мы получим и декодируем токен для других запросов.

Это создает токен, используя доступный нам jwt.sign() метод, и отправляет его в качестве ответа для действительной passport-local аутентификации.

Вот так выглядит наш обновленный auth/index.js

Это именно то, что мы ищем в нашем тесте, и он должен стать для нас зеленым.

Время использовать этот токен и настроить защищенный маршрут.

Мы построим еще один маршрут до GET /user endpoint и будем его защищать.

Напишите тест для маршрута пользователя

Мы знаем, что хотим защитить конечную точку GET /user и вернуть статус 401, если токен отсутствует в каком-либо запросе.

Сначала мы входим в систему и сохраняем токен, который получаем в ответ. Затем мы прикрепляем сохраненный токен в качестве заголовка Authorization, чтобы получить действительный ответ.

Мы также проверяем, является ли ответ 401, если токен отсутствует.

Мы можем обновить наши сиды, чтобы убедиться, что отправляются сообщения только для автора —

Итого мы создаем 8 постов и 2 авторов. С каждым из авторов связано 4 поста.

Мы также обновляем наш posts.spec.js, чтобы проверить наличие 8 сообщений.

Настроить паспортную стратегию JWT

Установить пакет

npm i passport-jwt

Добавьте файл auth/passport-jwt.js, где мы будем настраивать нашу логику

Мы определяем new Strategy(), где мы берем выбор декодирования и секрет из вариантов. Мы извлекаем полезную нагрузку из входящего запроса JWT и находим пользователя с электронной почтой из полезной нагрузки.

Если пользователь найден, мы присоединяем его к объекту req, после чего он доступен как req.user.

Для справки, мы можем использовать разные методы для ExtractJwt в зависимости от того, как клиент отправляет токен.

Создайте маршрут пользователя, импортируйте его и защитите паспортом

Теперь у нас настроена логика, пора построить маршрут и защитить его.

Сначала добавьте контроллерusers.js

Затем соедините его маршрутом routes/users.js

и импортируйте маршрут и используйте его в пределах app.js

Первый -

Потом -

Теперь маршрут подключен, и тесты станут зелеными!

Изучение JWT

Если мы перехватим JWT в полете, например. логирование/отладка консоли в user route test, мы получим что-то похожее на это —

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImF1dGhvckBtYWlsLmNvbSIsImlhdCI6MTU5MzQzNjcxMywiZXhwIjoxNTkzNDcyNzEzfQ.uTHjn39zcoSGWdFklAtWCsSOcJC2M-ORFMA

Мы можем посетить JWT.io и расшифровать токен, чтобы заглянуть внутрь —

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

В следующей части серии мы рассмотрим отношения «многие ко многим» с использованием sequenceize.

Craft Academy – это поставщик технического образования, целью которого является привлечение новых талантов на рынок и помощь в решении проблемы нехватки технических специалистов. Мы исходим из убеждения, что современные стандарты разработки, гибкие методологии и бизнес-навыки имеют основополагающее значение для ИТ-специалистов.

Наша основная услуга — это 12-недельный учебный курс по программированию, призванный дать людям базовые навыки, которые позволят им войти в отрасль в качестве младших разработчиков.

Благодаря этой базе наши учащиеся находят работу в различных отраслях или открывают собственный бизнес, выводящий на рынок новые инновации.

Хотите узнать больше о том, чем мы занимаемся? Подпишитесь на нас здесь, в Medium, Facebook, Twitter или посетите наш веб-сайт.