Доступ к странице по токену
Открывать страницу (или выполнять код), если есть токен, можно через метод URL::signedRoute()
.
Например, есть следующая страница:
# routes/web.php
Route::get('/event/approve', [EventController::class, 'approve'])->name('eventApprove');
На данной странице происходит онлайн-запись на какое-нибудь событие, например на мастер-класс. Для этого надо отправить ссылку для подтверждения на емайл пользователя.
Сгенерировать данную ссылку можно через метод URL::signedRoute()
.
# в любом месте кода в контроллере
use Illuminate\Support\Facades\URL;
// …
URL::signedRoute('eventApprove', ['email' => 'name@example.ru']); // 1-ый способ (абсолютная ссылка)
URL::signedRoute('eventApprove', ['email' => 'name@example.ru'], absolute: false); // 2-ой способ (без сайта в ссылке)
В итоге будет сгенерирована примерно следующая ссылка «https://sitename.ru/event/approve?email=name%40example.ru&signature=c7651886687be531c61823c86d498b5cefccf905331b4e12031d9524f46b3862».
Здесь стоит обратить внимание, что в строке запроса есть параметр «email». Если данный параметр изменится, то код вернёт, что токен с данным параметром некорректен.
Чтобы страница была доступна только по токену, в настройках рута надо добавить middleware('signed')
.
# routes/web.php
Route::get('/event/approve', [EventController::class, 'approve'])->name('eventApprove')->middleware('signed');
В случае если токен будет некорректный, Laravel вернёть страницу со статусом «403».
Или можно проверить токен вручную:
# контроллер
use Illuminate\Http\Request;
// …
public function approve(Request $request)
{
if ($request->hasValidSignature()) {
// токен корректный
} else {
// токен не корректный
}
}
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта