REST API сервис с авторизацией по JWT-токенам, управлением файлами и базой данных MySQL.
- Авторизация по jwt-токену (/info, /logout, /file(все роуты) );
- Настроить CORS для доступа с любого домена;
- DB – Mysql;
- Токен создавать при каждой авторизации, действителен 10 минут. Продлевать по истечению, с помощью refresh токена;
- Реализовать на основе фреймворка express js;
- API:
- /signin [POST] - запрос jwt-токена по id и паролю;
- /signin/new_token [POST] - обновление jwt-токена по refresh токену +/signup [POST] - регистрация нового пользователя; - Поля id и password, id это номер телефона или email;
- /file/upload [POST] - добавление нового файла в систему и запись параметров файла в базу: название, расширение, MIME type, размер, дата загрузки;
- /file/list [GET] выводит список файлов и их параметров из базы с использованием пагинации с размером страницы, указанного в передаваемом параметре list_size, по умолчанию 10 записей на страницу, если параметр пустой. Номер страницы указан в параметре page, по умолчанию 1, если не задан;
- /file/delete/:id [DELETE] - удаляет документ из базы и локального хранилища;
- /file/:id [GET] - вывод информации о выбранном файле;
- /file/download/:id [GET] - скачивание конкретного файла;
- /file/update/:id [PUT] - обновление текущего документа на новый в базе и локальном хранилище;
- При удачной регистрации вернуть пару jwt-токен и refresh токен;
- /info [GET] - возвращает id пользователя;
- /logout [GET] - выйти из системы;
- После выхода необходимо заблокировать текущие токены пользователя. При следующем входе, пользователь должен получить новую пару токенов, отличную от тех, которые были при выходе;
- Старые токены должны перестать работать после выхода;
- Вход в API может осуществлять несколько устройств под одним логином.
- После выхода одного из устройств, остальные устройства одного пользователя должны продолжать работать. Срок исполнения задания: 3 дня.
Клонируйте репозиторий:
git clone git@github.com:Romax-91/ERP_AERO.git
cd ERP_AERO
npm installСоздайте БД в MySQL и выполните запросы для инициализации таблиц db_schema.sql
Создайте файл .env в корне проекта на основе .env_example:
# Порт сервера
PORT=3000
# Настройки подключения MySQL
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=api_service
DB_PORT=3306
# JWT secrets
JWT_ACCESS_SECRET=your_access_secret_key_here
JWT_REFRESH_SECRET=your_refresh_secret_key_here
# срок жизни access токена
JWT_ACCESS_EXPIRE='10m'
# срок жизни refresh токена
JWT_REFRESH_EXPIRE='7d'
# Директория локального хранилища файлов
UPLOAD_DIR=uploadsЗапуск в режиме разработки:
npm run devЗапуск в продакшене:
npm start