DaydreamMods
Вход и сессии
Регистрация, токен, подтверждение почты и кто такой администратор.
Отдельной системы ролей сотрудников нет. В перечислении user_role два значения: user и admin.
Регистрация
Поля: ник (2–64 символа), почта, пароль от 8 символов. Почта хранится в нижнем регистре и уникальна. Пароль в базу не пишется: только хеш Argon2 в users.password_hash.
Сразу создаётся запись в email_tokens типа verify, срок сутки. Письмо содержит ссылку /verify?token=…. Повторное использование токена не подтверждает почту второй раз: токен помечается использованным.
Вход
Ищется пользователь по почте, пароль сверяется с хешем. При успехе в sessions пишется SHA-256 случайных 32 байт и срок 30 суток. Клиенту возвращается сырой токен. В базе сырого токена нет.
Выход удаляет сессии этого пользователя.
Сброс пароля — отдельный токен типа сброса. Ссылка /reset?token=…. Если SMTP нет, ссылка видна только в логе сервера.
Как панель понимает администратора
/admin на клиенте проверяет, что токен есть, и спрашивает auth.me. Если роль не admin, показывается экран «Нет доступа», данные панели не рисуются. Серверные процедуры админки дополнительно проверяют роль. Спрятать пункт меню недостаточно.
Кабинет
/account без токена уходит на /login?next=/account. В профиле: ник, почта, дата регистрации (users.created_at), подтверждена ли почта. Смена пароля — через /reset, не отдельной формой в кабинете.