1) SQLite: мне кажется, не очень подходит под прод, как минимум из-за однопоточности и блокировок. Больше двух человек на сайте и один из них либо ждёт пока база освободится (если настроено), либо получает BUSY_TIMEOUT и ошибку, при небольшой нагрузке такого конечно не будет, но потом придётся переходить.
2) Расширение SQLite в PHP: мне кажется стоит рассмотреть PDO, чтобы потом не пришлось переписывать всё под MySQL/PostgreSQL при переезде, в PDO просто драйвер меняется, а дамп и запросы можно просто адаптировать.
3) Хорошо, что используются подготовленные запросы, но не увидел защиты от XSS, она тут есть? (как и проверок на размер строк от пользователя)
4) Не во всех функциях есть проверки на успешность вставки (
createAuthToken, например), если вставить строку в базу не выйдет, а пользователю скажет, что он зашёл, получится прикол.
Главный вопрос, почему используется localStorage и токен хранится там, а не в куках или сессии с httpOnly?
Ещё, передавать
"success" в json необязательно, можно использовать HTTP-статусы (200, 401, 403 и тд)
Вообще можно было JS на >50% выпилить и сделать всё проще. Например, зачем нужен
checkAuthStatus? Можно сделать index.php, туда закинуть сразу проверку токена + сделать токен в куки (он будет передаваться теперь автоматически браузером, без отправки через Fetch) и оттуда редиректить куда надо:
header("Location: auth.php")
, если токен невалидный и отрисовка страницы, если с ним всё ок.
Logout делается теперь так же просто, переходим по ссылке (<a href="logout.php">), удаляем там куки, токен из базы и редиректим на index, всё.
Фронт особо не смотрел (как и вообще проект, напиши если что не так сказал), выглядит вроде неплохо, правда в некоторых местах немного кривовато
(tab-indicator и карусель-слайдер)
и запускаете sqlite (MYSQL)
Не понял.