Аутентификация
ЛР15
Создаем на Github репозиторий cwp-15, клонируем его, открываем в IDE
Копируем файлы из cwp-13
Установим библиотеки jsonwebtoken и bcryptjs
Добавим модель управляющего (manager) в наше приложение
"id": int / autoincrement
"email": string
"password": string
"fleetId": id / reference to "fleets"
"super": bool
Добавим методы в API:

POST /api/auth/register - принимает email и password и создает запись в таблице управляющих / пароль должен хранится в захэшированной форме (используем bcrypt)

POST /api/auth/login - принимает email и password и пытается аутентифицировать управляющего / в случае успеха возвращает токен созданный с помощью jwt.sign с зашитым id и email менеджера / время жизни токена 5 минут
Создадим middleware который будет для всех запросов к API кроме /api/auth/* проверять наличие в запросе заголовка Authorization.
При отсутствии этого заголовка возвращаем ошибку 401.
Если заголовок присутствует, проверяем его на валидность с помощью jwt.verify.
Если токен валидный загружаем менеджера по id из токена и помещаем в request.manager
Если токен не валидный или пользователь не найден возвращаем ошибку 403.
В заголовке перед токеном должно быть слово Bearer. Т.е. полностью заголовок вяглядит так Authorization: Bearer Токен
Дополним существующие методы API следующим образом:

GET /api/fleets/readall - возвращает массив машинных парков если запрос от суперменеджера / для остальных ошибка 403

GET /api/fleets/read - возвращает машинный парк к которому привязан менеджер / для суперменеджера ищем id в query

POST /api/fleets/create - доступно только суперменеджеру / для остальных ошибка 403

POST /api/fleets/update - доступно только суперменеджеру / для остальных ошибка 403

POST /api/fleets/delete - доступно только суперменеджеру / для остальных ошибка 403

GET /api/vehicles/readall - возвращает массив машин для парка к которому привязан менеджер / для суперменеджера все машины независимо от парка

GET /api/vehicles/read - проверяем если запрашиваемая машина в парке к которому привязан менеджер / для суперменеджера не проверяем

POST /api/vehicles/create - парк для машины берется из менеджера / для суперменеджера из тела запроса

POST /api/vehicles/update - проверяем если обновляемая машина в парке к которому привязан менеджер / для суперменеджера не проверяем

POST /api/vehicles/delete - проверяем если обновляемая машина в парке к которому привязан менеджер / для суперменеджера не проверяем

POST /api/motions/create - проверяем если машина в парке к которому привязан менеджер / для суперменеджера не проверяем

GET /api/vehicles/milage - проверяем если машина в парке к которому привязан менеджер / для суперменеджера не проверяем
Синхронизируем локальный репозиторий с удаленным (сделаем push на Github)
Покажите историю коммитов своего репозитория на Github
Продемонстрируйте работу сервера через Postman
Документация по JWT