Uwierzytelnianie

Ostrzeżenie przeglądasz dokumentację dla starej wersji Laravel. Rozważ uaktualnienie swojego projektu do Laravel 8.x.

  • wprowadzenie
  • uwierzytelnianie użytkowników
  • Odzyskiwanie uwierzytelnionego użytkownika
  • Ochrona tras
  • podstawowe uwierzytelnianie HTTP
  • przypomnienia hasła & Resetowanie
  • uwierzytelnianie społecznościowe

wprowadzenie

Laravel sprawia, że implementacja uwierzytelniania jest bardzo prosta. W rzeczywistości prawie wszystko jest skonfigurowane dla ciebie po wyjęciu z pudełka. Plik konfiguracyjny uwierzytelniania znajduje się pod adresem config/auth.php, który zawiera kilka dobrze udokumentowanych opcji zmiany zachowania usług uwierzytelniania.

domyślnie Laravel zawiera model App\User w katalogu app. Ten model może być używany z domyślnym Eloquent authentication driver.

pamiętaj: budując schemat bazy danych dla tego modelu, Ustaw kolumnę hasła na co najmniej 60 znaków. Zanim zaczniesz, upewnij się, że tabela users (lub jej odpowiednik) zawiera 100-znakową kolumnę z łańcuchem znaków remember_token. Ta kolumna będzie używana do przechowywania tokenu dla sesji „Zapamiętaj mnie” prowadzonych przez Twoją aplikację. Można to zrobić używając $table->rememberToken(); podczas migracji. Oczywiście, Laravel 5 wysyła migracje dla tych kolumn po wyjęciu z pudełka!

jeśli Twoja aplikacja nie używa Eloquent, możesz użyć sterownika uwierzytelniania database, który używa konstruktora zapytań Laravel.

uwierzytelnianie użytkowników

Laravel jest dostarczany z dwoma kontrolerami powiązanymi z uwierzytelnianiem po wyjęciu z pudełka. AuthController obsługuje rejestrację nowych użytkowników i „logowanie”, podczas gdy PasswordController zawiera logikę, która pomaga istniejącym użytkownikom zresetować zapomniane hasła.

każdy z tych kontrolerów używa cechy, która zawiera ich niezbędne metody. W przypadku wielu aplikacji nie trzeba w ogóle modyfikować tych kontrolerów. Widoki renderowane przez te kontrolery znajdują się w katalogu resources/views/auth. Możesz dowolnie dostosowywać te widoki.

Rejestrator użytkownika

aby zmodyfikować pola formularza, które są wymagane, gdy nowy użytkownik rejestruje się w aplikacji, możesz zmodyfikować klasę App\Services\Registrar. Ta klasa jest odpowiedzialna za walidację i tworzenie nowych użytkowników twojej aplikacji.

metoda validator z Registrar zawiera reguły walidacji dla nowych użytkowników aplikacji, natomiast metoda create z Registrar jest odpowiedzialna za tworzenie nowych rekordów User w Twojej bazie danych. Możesz dowolnie modyfikować każdą z tych metod. Registrar jest wywoływany przez AuthController za pomocą metod zawartych w Cechie AuthenticatesAndRegistersUsers.

uwierzytelnianie ręczne

jeśli zdecydujesz się nie używać dostarczonej implementacji AuthController, będziesz musiał zarządzać uwierzytelnianiem użytkowników bezpośrednio za pomocą klas uwierzytelniania Laravel. Nie martw się, to jeszcze Pestka! Najpierw sprawdźmy metodę attempt:

metoda attempt przyjmuje jako pierwszy argument tablicę par klucz / wartość. Wartość password zostanie zahaszowana. Pozostałe wartości w tablicy zostaną użyte do znalezienia użytkownika w tabeli bazy danych. Tak więc, w powyższym przykładzie, użytkownik zostanie pobrany przez wartość kolumny email. W przypadku znalezienia użytkownika, hashowane hasło zapisane w bazie danych zostanie porównane z hashowaną wartością passwordprzekazaną do metody za pomocą tablicy. Jeśli oba hasła są zgodne, zostanie uruchomiona nowa uwierzytelniona sesja dla użytkownika.

metoda attempt zwróci true, jeśli uwierzytelnianie się powiodło. W przeciwnym razie zostanie zwrócona wartość false.

Uwaga: w tym przykładzie email nie jest wymaganą opcją, jest tylko używana jako przykład. Powinieneś używać dowolnej nazwy kolumny odpowiadającej „username” w Twojej bazie danych.

funkcja przekierowania intended przekieruje użytkownika na adres URL, do którego próbował uzyskać dostęp, zanim zostanie przechwycony przez filtr uwierzytelniania. Dla tej metody można podać awaryjny URI w przypadku, gdy planowane miejsce przeznaczenia nie jest dostępne.

uwierzytelnianie użytkownika z warunkami

Możesz również dodać dodatkowe warunki do zapytania uwierzytelniania:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

Określanie, czy użytkownik jest uwierzytelniony

aby określić, czy użytkownik jest już zalogowany w aplikacji, możesz użyć metody check :

if (Auth::check()){ // The user is logged in...}

uwierzytelnianie użytkownika i „zapamiętywanie” go

jeśli chcesz zapewnić funkcjonalność „Zapamiętaj mnie” w swojej aplikacji, możesz przekazać wartość logiczną jako drugi argument do metody attempt, która utrzyma uwierzytelnianie użytkownika na czas nieokreślony lub do momentu ręcznego wylogowania. Oczywiście twoja tabela users musi zawierać kolumnę string remember_token, która będzie używana do przechowywania tokenu „remember me”.

if (Auth::attempt(, $remember)){ // The user is being remembered...}

jeśli „pamiętasz” użytkowników, możesz użyć metody viaRemember, aby określić, czy użytkownik został uwierzytelniony za pomocą pliku cookie „Zapamiętaj mnie”:

if (Auth::viaRemember()){ //}

uwierzytelnianie użytkowników za pomocą ID

aby zalogować użytkownika do aplikacji za pomocą ID, użyj metody loginUsingId :

Auth::loginUsingId(1);

Walidacja poświadczeń użytkownika bez logowania

metoda validate umożliwia walidację poświadczeń użytkownika bez faktycznego logowania ich do aplikacji:

if (Auth::validate($credentials)){ //}

Logowanie użytkownika dla pojedynczego żądania

Możesz również użyć metody once, aby zalogować użytkownika do aplikacji dla pojedynczego żądania. Nie będą wykorzystywane żadne sesje ani pliki cookie:

if (Auth::once($credentials)){ //}

ręczne Logowanie użytkownika

jeśli chcesz zalogować istniejącą instancję użytkownika do swojej aplikacji, możesz wywołać metodę login z instancją użytkownika:

Auth::login($user);

jest to równoznaczne z zalogowaniem użytkownika za pomocą poświadczeń przy użyciu metody attempt.

wylogowanie użytkownika z aplikacji

Auth::logout();

oczywiście, jeśli używasz wbudowanych kontrolerów uwierzytelniania Laravel, metoda kontrolera obsługująca wylogowywanie użytkowników z aplikacji jest dostarczana po wyjęciu z pudełka.

zdarzenia uwierzytelniające

gdy zostanie wywołana metoda attempt, zostanie wywołane zdarzenie auth.attempt. Jeśli próba uwierzytelnienia się powiedzie i użytkownik jest zalogowany, Zdarzenie auth.login również zostanie wywołane.

pobieranie uwierzytelnionego użytkownika

po uwierzytelnieniu użytkownika istnieje kilka sposobów uzyskania instancji użytkownika.

po pierwsze, możesz uzyskać dostęp do użytkownika z fasady Auth:

po drugie, możesz uzyskać dostęp do uwierzytelnionego użytkownika za pośrednictwem instancji Illuminate\Http\Request:

po trzecie, możesz wpisać-podpowiedź do umowy Illuminate\Contracts\Auth\Authenticatable. Podpowiedź typu może być dodana do konstruktora kontrolera, metody kontrolera lub dowolnego innego konstruktora klasy rozwiązanej przez kontener usług:

Ochrona tras

oprogramowanie pośredniczące trasy może być używane, aby umożliwić dostęp do danej trasy tylko uwierzytelnionym użytkownikom. Laravel domyślnie dostarcza oprogramowanie pośrednie authi jest zdefiniowane w app\Http\Middleware\Authenticate.php. Wszystko, co musisz zrobić, to dołączyć go do definicji trasy:

HTTP Basic Authentication

HTTP Basic Authentication zapewnia szybki sposób uwierzytelniania użytkowników aplikacji bez konfigurowania dedykowanej strony „login”. Aby rozpocząć, Dołącz oprogramowanie pośredniczące auth.basic do trasy:

Ochrona trasy za pomocą HTTP Basic

Route::get('profile', );

domyślnie oprogramowanie pośredniczące basic użyje kolumny email w rekordzie użytkownika jako „nazwa użytkownika”.

Konfigurowanie Bezstanowego filtra HTTP Basic

można również używać uwierzytelniania HTTP Basic bez ustawiania pliku cookie identyfikatora użytkownika w sesji, co jest szczególnie przydatne w przypadku uwierzytelniania API. Aby to zrobić, zdefiniuj oprogramowanie pośredniczące, które wywołuje metodę onceBasic :

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

jeśli używasz PHP FastCGI, uwierzytelnianie podstawowe HTTP może nie działać poprawnie po wyjęciu z pudełka. Do pliku .htaccess należy dodać następujące wiersze:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

przypomnienia hasła & Resetuj

Model & tabela

większość aplikacji internetowych umożliwia użytkownikom Resetowanie zapomnianych haseł. Zamiast zmuszać cię do ponownego wdrożenia tego w każdej aplikacji, Laravel zapewnia wygodne metody wysyłania przypomnień o hasłach i resetowania hasła.

aby rozpocząć, sprawdź, czy twój model User realizuje umowę Illuminate\Contracts\Auth\CanResetPassword. Oczywiście model User dołączony do frameworka już implementuje ten interfejs i używa cechy Illuminate\Auth\Passwords\CanResetPassword do włączenia metod potrzebnych do implementacji interfejsu.

generowanie migracji tabeli przypomnień

Następnie należy utworzyć tabelę do przechowywania tokenów resetowania hasła. Migracja dla tej tabeli jest dołączana do Laravel po wyjęciu z pudełka i znajduje się w katalogu database/migrations. Więc wszystko, co musisz zrobić, to migrować:

php artisan migrate

Kontroler przypomnienia hasła

Laravel zawiera również kontroler Auth\PasswordController, który zawiera logikę niezbędną do resetowania haseł użytkowników. Zapewniliśmy nawet widoki, które pozwolą Ci zacząć! Widoki znajdują się w katalogu resources/views/auth. Możesz dowolnie modyfikować te widoki, tak aby pasowały do projektu Twojej aplikacji.

Twój użytkownik otrzyma e-mail z linkiem wskazującym na metodę getResetPasswordController. Ta metoda wyrenderuje formularz resetowania hasła i pozwala użytkownikom na zresetowanie haseł. Po zresetowaniu hasła użytkownik zostanie automatycznie zalogowany do aplikacji i przekierowany na /home. Możesz dostosować lokalizację przekierowania po zresetowaniu, definiując właściwość redirectTo na PasswordController:

protected $redirectTo = '/dashboard';

Uwaga: Domyślnie tokeny resetowania hasła wygasają po godzinie. Można to zmienić za pomocą opcji reminder.expire w pliku config/auth.php.

uwierzytelnianie społecznościowe

oprócz typowego uwierzytelniania opartego na formularzach, Laravel zapewnia również prosty i wygodny sposób uwierzytelniania z dostawcami OAuth za pomocą Laravel Socialite. Socialite obsługuje obecnie uwierzytelnianie za pomocą Facebooka, Twittera, Google, GitHub i Bitbucket.

aby rozpocząć pracę z Socialite, Dołącz pakiet do pliku composer.json :

"laravel/socialite": "~2.0"

następnie zarejestruj Laravel\Socialite\SocialiteServiceProvider w swoim pliku konfiguracyjnym config/app.php. Można również zarejestrować elewację:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

będziesz musiał dodać poświadczenia do usług OAuth, z których korzysta Twoja aplikacja. Te poświadczenia powinny być umieszczone w pliku konfiguracyjnym config/services.php i powinny używać klucza facebook, twitter, google, lub github, w zależności od dostawców, których wymaga Twoja aplikacja. Na przykład:

'github' => ,

następnie jesteś gotowy do uwierzytelniania użytkowników! Będziesz potrzebował dwóch tras: jeden do przekierowania użytkownika do dostawcy OAuth, a drugi do odbierania oddzwonienia od dostawcy po uwierzytelnieniu. Oto przykład przy użyciu metody Socialize:

metoda redirect zajmuje się wysyłaniem użytkownika do dostawcy OAuth, podczas gdy metoda user odczyta przychodzące żądanie i pobierze informacje o użytkowniku od dostawcy. Przed przekierowaniem użytkownika, można również ustawić „zakresy” na żądanie:

return Socialize::with('github')->scopes()->redirect();

gdy masz instancję użytkownika, możesz pobrać kilka szczegółów o użytkowniku:

Odzyskiwanie danych użytkownika