Статья от программиста Binn Михаила Мельникова
Подписанные маршруты позволяют создавать такие маршруты, которые доступны только при передаче параметра GET. GET-параметр (CGI-параметр) — это динамический параметр в URL-адресе, с помощью которого можно изменить содержимое документа.
Laravel — это бесплатный веб-фреймворк с открытым кодом. Он помогает в создании URL-адресов для приложения. С его помощью можно создавать ссылки в ваших шаблонах и ответах API.
Подписанные маршруты можно использовать для публикации предварительного просмотра черновика статьи или любого другого пути, который вы хотите сделать общедоступным для пользователей, у которых есть подпись. Вы также можете настроить доступ к маршруту в течение определенного периода времени.
Например, если вы запускаете новый курс или SaaS, вы можете открыть регистрацию только на один день и разрешить ограниченному количеству пользователей оформить подписку.
В этом руководстве вы узнаете, как создавать подписанные маршруты для вашего приложения в Laravel.
Для примера создадим маршрут, который возвращает код скидки. Этот маршрут будет доступен только в течение 10 минут, поэтому код на скидку получат первые несколько пользователей, которые попадут на этот маршрут.
Чтобы создать подписанный маршрут, для начала вам необходимо запустить приложение Laravel. Далее откройте routes/web.php файл в любом текстовом редакторе и добавьте следующий код:
Route::get(‘/discount’, function(){
return ‘some_discount_code_here’;
})->name(‘discountCode’)->middleware(‘signed’);
Теперь, благодаря посреднику, маршрут будет доступен только в том случае, если у пользователя есть хэш подписи, который указан в качестве параметра. Если пользователь посетит /discount маршрут напрямую, без подписи, он получит ошибку 403 (Forbidden, доступ запрещен).
Далее мы расскажем, как получить временный подписанный URL-адрес маршрута.
1. Для генерации подписи используйте метод URL::temporarySignedRoute.
2. Создайте контроллер Laravel, который сгенерирует для вас подписанный маршрут:
php artisan make:controller DiscountController
3. Новый контроллер будет расположен по адресу:
app/Http/Controllers/DiscountController.php
4. Откройте файл с помощью вашего любого текстового редактора и добавьте URL фасад:
use Illuminate\Support\Facades\URL;
public function discount()
{
return URL::temporarySignedRoute(
‘discountCode’, now()->addMinutes(30)
);
}
Для добавления нового маршрута откройте routes/web.php файл и скопируйте следующий код:
use App\Http\Controllers\DiscountController;
Route::get(‘/generate-signature’, [DiscountController::class, ‘discount’]);
Теперь, если у вас будет доступ к /generate-signature URL-адресу через браузер и вы получите аналогичный результат:
Теперь, когда пользователь зайдет на URL-адрес с подписью, он получит код скидки в качестве ответа.
Обратите внимание: если вы получите сообщение об ошибке, что signed класс не существует, обязательно добавьте в массив protected $routeMiddleware в файле:
app/Http/Kernel.php:
‘signed’ =>\Illuminate\Routing\Middleware\ValidateSignature::class,
URL-адрес будет действителен только в течение 30 минут, но вы можете сгенерировать подписанные URL-адреса так, чтобы они были действительны всегда.
Источник: devdojo.com
Я даю согласие OOO «ЭсБилдер» (далее «BINN») на обработку моих персональных данных в соответствии со статьями 6, 9, 10, 18 Федерального закона от 27 июля 2006 года № 152-ФЗ «О персональных данных», указанных в онлайн-форме и/или предоставленных мною с целью:
Способы обработки персональных данных могут быть любыми, включая сбор, систематизацию, накопление, хранение, уточнение, обновление, изменение, воспроизведение, обезличивание, блокирование и уничтожение.
Настоящее согласие применяется в отношении обработки следующих данных: имя, номер телефона, адрес электронной почты (E-mail).
Настоящее согласие предоставляется сроком на пять лет. По истечении указанного срока действие согласия считается продленным на каждые следующие пять лет при отсутствии сведений о его отзыве.
Согласие может быть отозвано мною в любой момент путем направления в BINN подписанного мною письменного заявления.