Метод temporarySignedRoute
Метод temporarySignedRoute применяется к экземпляру класса URL и генерирует подписанный URL с ограниченным сроком действия. Первым параметром передаётся имя маршрута, вторым - время жизни ссылки в минутах, третьим - массив параметров маршрута. Опционально четвертым параметром можно передать имя хеш-алгоритма, используемого для подписи. Метод возвращает строку с полным URL-адресом, содержащим подпись и временную метку истечения.
Синтаксис
<?php
URL::temporarySignedRoute($name, $expiration, $parameters);
?>
Пример
Давайте создадим временную подписанную ссылку для подтверждения email, которая будет действительна 60 минут:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\URL;
use App\Models\User;
class UserController extends Controller
{
public function sendVerificationEmail(User $user)
{
$url = URL::temporarySignedRoute(
'verification.verify',
60,
['id' => $user->id, 'email' => $user->email]
);
// Send email with verification link
echo $url;
}
}
?>
Результат выполнения кода:
"https://example.com/verify/1?email=user%40example.com&expires=1640995200&signature=7e8f9a2b..."
Пример
Давайте создадим временную ссылку для скачивания отчёта, которая будет действительна 15 минут и содержит дополнительные параметры:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\URL;
use App\Models\Report;
class ReportController extends Controller
{
public function generateDownloadLink(Report $report)
{
$url = URL::temporarySignedRoute(
'report.download',
15,
[
'id' => $report->id,
'format' => 'pdf',
'userId' => auth()->id()
]
);
echo $url;
}
}
?>
Результат выполнения кода:
"https://example.com/report/5/download?format=pdf&userId=123&expires=1640996100&signature=3a4b5c6d..."
Пример
Давайте создадим временную подписанную ссылку и проверим её валидность с использованием помощника hasValidSignature в контроллере:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\URL;
use Illuminate\Http\Request;
use App\Models\User;
class VerifyController extends Controller
{
public function createLink(User $user)
{
$url = URL::temporarySignedRoute(
'verify.email',
30,
['id' => $user->id, 'hash' => sha1($user->email)]
);
echo $url;
}
public function verify(Request $request, $id)
{
if (!URL::hasValidSignature($request)) {
echo "Invalid or expired link";
return;
}
$user = User::find($id);
$user->email_verified_at = now();
$user->save();
echo "Email successfully verified";
}
}
?>
Результат выполнения кода:
"https://example.com/verify/123?hash=abc123...&expires=1640997000&signature=9f8e7d6c..."
Смотрите также
-
метод
signedRoute,
который создаёт постоянные подписанные ссылки без ограничения по времени -
метод
hasValidSignature,
который проверяет валидность подписанной ссылки -
метод
name,
который присваивает имя маршруту для последующей генерации ссылок -
функция
route,
которая генерирует обычные URL-адреса без подписи