Марсель Абазбеков

Full Stack разработчик

Fullstack-разработчик с опытом работы на TypeScript (Nest.js, Express, Prisma) и Go для бэкенда, включая работу с PostgreSQL, Redis, BullMQ и чистым SQL. Также разрабатывал небольшие сервисы на Python с FastAPI. На фронтенде использую React, Next.js, Electron и Effector вместе с сопутствующими технологиями.

Успешно применяю Git для организации рабочего процесса и контроля версий. Имею опыт работы с инструментами непрерывной интеграции и развертывания (CI/CD) GitHub Actions, GitLab CI.

Также иногда вношу вклад в open-source проекты, которыми пользуюсь.

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

В 2024 закончил бакалавриат по программе «Программная инженерия» в НГТУ.

Навыки

Frontend

JavaScript, TypeScript, Electron, React, Next.js, Vite, Tailwind, Styled Components, SCSS, Redux, Effector, PWA, SSG

Backend

JavaScript, TypeScript, Node.js, Express.js, Nest.js, SQL, Prisma, PostgreSQL, Redis, BullMQ, Go, Gin, Gorm, REST API, GraphQL, SSE

Общие навыки

Git, Linux, Nginx, Docker, Ansible, GitLab CI, etc.

Другие технологии

C, C++, Java, Hibernate, JavaFX, Android apps on Android SDK, Python, Selenium, FastAPI, Vue

JWT Auth

Пример системы авторизации с парой access- и refresh-токенов на языке Go

Go Gin Gorm PostgreSQL REST API TypeScript Axios React

Авторизация парой access- и refresh-токенов. Refresh-токен хранится в PostgreSQL, чтобы его можно было отозвать и отследить повторное использование. Refresh-токен передается клиенту в httpOnly cookie и дублируется в теле ответа для клиентов без поддержки cookie.

При обновлении пары сервер сверяет fingerprint браузера и User-Agent с сохраненными. Если refresh-токена нет в БД или fingerprint и User-Agent не совпали, сервер удаляет все refresh-токены пользователя. Fingerprint и User-Agent передаются с клиента и могут подделываться, поэтому защита от кражи частичная. Для продакшена нужен fingerprint, который сложно подделать на стороне клиента. При выходе из одной или всех сессий токены удаляются из БД. Бэкенд также поддерживает OAuth-вход, регистрацию и привязку провайдеров к аккаунту. Код провайдера обменивается на токены через PKCE.

Для демонстрации работы API реализовано react-приложение: формы входа и регистрации по паролю и через OAuth, страница профиля с активными сессиями и удалением пользователя. Фронт подставляет access-токен в заголовки и обновляет его через axios-интерцептор, если токен истек или скоро истечет. Параллельные обновления access-токена объединяются в один запрос, при входе и обновлении пары отправляется fingerprint браузера.