Чем отличается переход по ссылке из письма от "скопировал, вставил, нажал enter"?

Хочу послушать мнение коллег.
Столкнулся с тем, что мое приложение ведет себя по разному, в зависимости от того, как перешли на страницу — из письма или просто вставив ссылку в браузер.
Немного подробностей.
Есть роут, который откликается на get запрос
$app->get('/c/{lang}/confirm/{hash}/',WelcomeController::class.":confirm");
При переходе на эту странице методом get происходит получение заключенного в ссылке хеша, получение пользователя и подтверждения его регистрации. Контроллер а вернее его метод, который обрабатывает этот роут имеет защиту, на случай если по хешу не удалось найти пользователя, выдает текст, что вы перешли по неверной ссылке.
Ссылка приходит пользователю в письме.
Все работает шикарно, если я беру и вписываю ссылку в браузер или копирую с письма и вставляю. Без збоев пользователь активируется.
Но стоит кликнуть просто по ссылке в письме (gmail) то открывается новая вкладка, переходим по ссылке и почти всегда — я вижу уведомление что ссылка ошибочна. Хотя иногда, редко — все же срабатывает.

Какие ваши идеи? Чем переход из письма отличается от прямого перехода?
Спасибо.
Александр Мельник
02 февраля 2022, 20:14
modx.pro
160
0

Комментарии: 2

Александр Мельник
03 февраля 2022, 13:20
0
Какие родились у меня мысли.
Видимо почтовый сервис, делает какой-то предварительный запрос по ссылкам, указанным в письме.
С какой целью, понять сложно, может хотят убедиться что там не 404 или что там безопасно или ведут свою «слежку» за всем.
А уже потом человек кликает по ссылке и совершается второй запрос.
Только так я могу пояснить тот факт, что пользователь активируется, но человек перешедший по ссылке, видит надпись что такой пользователь не найден или уже был ранее активирован.
Это не приятно(
    Наумов Алексей
    03 февраля 2022, 14:11
    +1
    Да, если это так — правда неоднозначная ситуация.
    Стоит изучить логи сервера (nginx к примеру, имею ввиду), посмотреть, есть ли там такие «двойные» запросы. Возможно, стоит фильтровать по UserAgent, если это почтовый сервер (робот) — не активировать пользователя.

    Ну а еще вариант — пусть ссылка ведет на страницу с формой и кнопочкой, которую робот нажимать не будет, а пользователь будет, и только при отправке формы (через post) активировать пользователя.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2