Доступ к странице по токену

Открывать страницу (или выполнять код), если есть токен, можно через метод 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 {
    // токен не корректный
  }
}