Coreate | Разработка #2
Привет, сейчас быстренько пробегусь по тому что успел сделать в беке за последнее время
— — — 1. МОДУЛЬ IDENTITY — — —
Логичнее всего было начать разработку именно с него. Пока нет нормальной работы с пользователем, нет смысла пилить фичи проектов, чатов и всего остального.
За что сейчас отвечает этот модуль: • Регистрация и вход: создание аккаунта, проверка почты и уникальность никнеймов. • Управление сессиями: контроль того, кто, когда и с какого устройства зашёл в систему. • Безопасное хранение: работа с паролями, хешами и личными данными. • Роли и доступы: разграничение прав (юзер, модер, админ). • Recovery: механизмы сброса пароля и верификации.
— — — 2. АВТОРИЗАЦИЯ И СЕССИИ — — —
С регистрацией всё просто: почта, юзернейм, пароль. А вот над авторизацией я посидел подольше. Конечно, можно было оставить голые JWT-токены и забить, но я решил добавить нормальный уровень безопасности и объединил JWT с механизмом сессий.
Теперь управление аккаунтом похоже на Telegram: • Прозрачность: Видно список всех активных устройств и браузеров. • Удаленное управление: Можно завершить конкретную подозрительную сессию или нажать «Выйти на всех устройствах». • Гибкость: Если потерял доступ к ПК или телефону, сессию легко аннулировать с другого девайса.
Чтобы не вводить логин и пароль каждый час, используется пара токенов: Access (короткий) и Refresh (длинный). Реализовал это через обновление текущей сессии(ротация токенов): когда Access протухает, мы берем старый refresh, и если он валиден - не создаем новую сессию, а продлеваем текущую, выдавая новую пару токенов. Так мы не плодим мусор в базе и моментально реагируем если токен был скомпрометирован.
— — — 3. МОДУЛЬ PROFILE — — —
На текущий момент Profile готов примерно на 60%. Большая часть времени здесь ушла не на новые фичи, а на глобальный рефакторинг.
• Result Pattern: Внедрил этот паттерн везде. Теперь бек не выкидывает исключения, а возвращает типизированный результат с данными или ошибкой. Код стал гораздо чище и быстрее, так как кидать исключения довольно дорогая операция.
• События (Wolverine): Настроил систему событий, чтобы модули были максимально независимы. Например, когда юзер меняет инфу в профиле, генерируется событие ProfileUpdated. Модули чатов или проектов просто подписываются на него и обновляют данные у себя асинхронно.
Это и есть та самая низкая связанность. В будущем это позволит легко вынести любой модуль в отдельный микросервис на Go(или мб Rust), вообще не переписывая остальной проект.
— — — 4. ДИЗАЙН — — —
Ну и параллельно с бекендом решил накидать примерный дизайн (на скринах). • Цвета: Глубокий синий и его оттенки. • Стиль: Минималистичный и приятный глазу. Упор на полную кастомизацию (мне лень придумывать что то).
На этом пока всё. Всем удачи
· 24.02
что будет, если у пользователя будет несколько активных сессий на разных устройствах? как вы будете учитывать их взаимодействие и возможные конфликты при изменении данных профиля?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 25.02
на счет первого вопроса: каждое устройство - это отдельная независимая сессия в базе со своей парой токенов. Ограничений на количество устройств нет и они никак друг другу не мешают
на счет второго: пока что данные будут перезатираться тем запросом, который придет последним
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён