Podpisane Routy / URLe w Laravelu
Od wydania Laravela w wersji 5.6.12 mamy dostęp do nowej funkcjonalności - podpisane routy/urle/adresy !
Jest to świetna funkcjonalność którą z całą pewnością warto znać. Daje ona bardzo dużo ciekawych możliwości .
Podpisane Adresy
Mechanizm ten pozwala w bardzo prosty sposób stworzyć "podpisane" URLe do routów z nazwami. Adresy te posiadają podpis w postaci zahaszowanej sygnatury, która jest dołączona do adresu jako query string. Pozwala to na weryfikację URLa - że nie został on zmodyfikowany od momentu jego wygenerowania. Podpisane URLe mogą być szczególnie użyteczne dla routów które są publicznie dostępne ale jednak potrzebujemy jakiejś ochrony przeciwko manipulacji adresów.
Użycie
Wykorzystaniem tej funkcjonalności może być dla przykładu implementacja publicznego interfejsu rezygnacji z subskrypcji (link wysłany do użytkownika przez wiadomość e-mail).
By stworzyć taki podpisany adres powiązany z nazwanym routem wystarczy użyć metody statycznej signedRoute na fasadzie URL.
return URL::signedRoute('unsubscribe', ['user' => 1]);
Adresy podpisane tymczasowo
Mamy również możliwość utworzenia tymczasowo podpisanych adresów, które wygasają po określonym czasie. Stworzenie ich jest równie proste, wystarczy użyć metody statycznej temporarySignedRoute.
return URL::temporarySignedRoute(
'unsubscribe', now()->addMinutes(30), ['user' => 1]
);
Walidacja podpisanych adresów
By zweryfikować czy przychodzące żądanie zawiera poprawną sygnaturę możemy wykorzystać metodą hasValidSignature na obiekcie przychodzącego żądania.
Route::get('/unsubscribe/{user}', function (Request $request) {
if (! $request->hasValidSignature()) {
abort(401);
}
// ...
})->name('unsubscribe');
Walidacja podpisanych adresów z użyciem middleware'a
Alternatywnie jest możliwość przypisania middleware'a Illuminate\Routing\Middleware\ValidateSignature do interesującego nas route'a.
Pamiętaj tylko, że jeśli middleware ten nie jest obecny w twojej aplikacji, to powinieneś go przypisać go do tablicy routeMiddleware w kernelu Laravela.
protected $routeMiddleware = [
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
];
Gdy tylko zarejestrujesz ten middleware w kernelu twojej aplikacji, to będziesz mógł go podpiąć do wybranych routów. Jeśli przychodzące żądanie nie posiada poprawnej sygnatury, wówczas middleware ten wyrzuci automatycznie odpowiedź 401.
Route::post('/unsubscribe/{user}', function (Request $request) {
// ...
})->name('unsubscribe')->middleware('signed');
Podsumowując
Świetna funkcjonalność która ma wiele zastosowań . Warto znać, używać i pamiętać o niej. Na pewno przyda się nie raz .
Dziękuję ci za lekturę tego artykułu, jeśli jakkolwiek uznasz go za przydatny to proszę podziel się nim z innymi udostępniając go . Proszę cię również o zostawienie komentarza pod tym wpisem i zapraszam cię gorąco do lektury innych moich artykułów, szczególnie tych związanych z Laravelem .
A tymczasem życzę ci dobrego dnia, bywaj !