Страница, доступная в указанный период
Если надо сделать, чтобы страница или код был доступен в указанный период времени (например для подтверждения емайла или кода), то это можно сделать через метод URL::temporarySignedRoute()
.
# в любом месте кода в контроллере
use Illuminate\Support\Facades\URL;
// …
URL::temporarySignedRoute('eventApprove', now()->addMinutes(30), ['email' => 'name@example.ru']);
Код сгенерирует примерно следующую ссылку «https://sitename.ru/news?email=name%40example2.ru&expires=1737903869&signature=f8dfaa7b522d390ca28407c06c0ac3190d936335d275eb7bfcb9c18c1fd1b467».
Здесь стоит обратить внимание, что в строке запроса есть два параметра, «email» и «expired». Если изменить хотя бы один параметр, то код вернёт, что токен с данным параметром некорректен.
Чтобы страница была доступна только по токену, в настройках рута надо добавить 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 {
// токен не корректный
}
}
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта