✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Uwierzytelnianie aplikacji mobilnej za pomocą tokena w Laravel

114

Czy używasz Laravela jako back-endu swojej aplikacji mobilnej? Jeśli tak, to prawdopodobnie szukasz prostego rozwiązania do uwierzytelniania aplikacji mobilnej. Wielu użytkowników może korzystać z Twojej aplikacji mobilnej i chcesz przeprowadzić uwierzytelnianie, aby udostępniać treści użytkownikom mobilnym. W tym artykule dowiemy się, jak przeprowadzić uwierzytelnianie oparte na tokenach w Laravel. Możesz również użyć tego samego podejścia do uwierzytelniania REST API.

Zamierzamy zintegrować Laravel Sanctum, który jest lekkim systemem uwierzytelniania. Możesz uznać to za zamiennik uwierzytelniania opartego na OAuth.

Podczas korzystania z Sanctum tokeny API użytkownika są przechowywane w bazie danych. Ten token musi zostać wysłany jako Bearertoken poprzez Authorizationnagłówek z aplikacji mobilnej do punktów końcowych Laravel API. Te tokeny mają zazwyczaj bardzo długi czas ważności (lata).

Biorąc to pod uwagę, przyjrzyjmy się, jak używać Sanctum do uwierzytelniania aplikacji mobilnych.

Zainstaluj i skonfiguruj Laravel Sanctum

Aby rozpocząć, musisz najpierw zainstalować pakiet Sanctum w swojej aplikacji Laravel. Zainstaluj go za pomocą polecenia:

composer require laravel/sanctum

Następnie opublikuj pliki konfiguracyjne i migracyjne Sanctum, uruchamiając poniższe polecenie.

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

Następnie uruchom komendę migracji, która utworzy personal_access_tokenstabelę w Twojej bazie danych. To jest tabela, w której będą przechowywane wszystkie tokeny API.

php artisan migrate

Domyślnie każde żądanie w Laravel wymaga tokena csrf. W przypadku braku tego tokena csrf, Laravel nie kontynuuje Twojego żądania. Jeśli chodzi o generowanie tokenów API za pomocą Sanctum, musimy pominąć wysyłanie tokena csrf. W tym celu dodaj sanctum/tokentrasę do $exceptzmiennej app/Http/Middleware/VerifyCsrfToken.php. Tę sanctum/tokentrasę utworzę w kolejnych krokach.

<?php ... class VerifyCsrfToken extends Middleware {     /**      * The URIs that should be excluded from CSRF verification.      *      * @var array      */     protected $except = [         'sanctum/token'     ]; }

W celu uwierzytelnienia musimy wydać użytkownikom token. Musisz więc użyć HasApiTokenscechy do modelu użytkownika w następujący sposób.

<?php   namespace AppModels; ... use LaravelSanctumHasApiTokens;   class User extends Authenticatable {     use HasApiTokens, HasFactory, Notifiable;     ... }

Wydawanie tokenów API do uwierzytelniania

Aby w każdym żądaniu wysłać token Bearer z nagłówkiem Authorization, należy najpierw wystawić token API. Zamierzam stworzyć metodę, która generuje token API dla każdego użytkownika. Do wystawienia tokena wymagane będzie przesłanie adresu e-mail, hasła oraz urządzenia użytkownika.

Dodaj poniższą trasę w routes/web.php

Route::post('/sanctum/token', 'APITokenController@create_token');

Następnie utwórz kontroler APITokenControllerza pomocą polecenia:

php artisan make:controller APITokenController

Zdefiniuj create_token()metodę w nowo utworzonym kontrolerze w następujący sposób.

<?php   namespace AppHttpControllers;   use AppModelsUser; use IlluminateHttpRequest; use IlluminateSupportFacadesHash; use IlluminateValidationValidationException;   class APITokenController extends Controller {     public function create_token(Request $request)     {         $request->validate([             'email' => 'required|email',             'password' => 'required',             'device_name' => 'required',         ]);               $user = User::where('email', $request->input('email'))->first();           if (! $user ||! Hash::check($request->input('password'), $user->password)) {             return [                 'error' => 'The provided credentials are incorrect.'             ];         }               return $user->createToken($request->input('device_name'))->plainTextToken;     } }

Powyższy kod najpierw sprawdza poświadczenia użytkownika. Jeśli poświadczenia są poprawne, to w odpowiedzi wysyła token w formacie zwykłego tekstu. Tutaj otrzymuję wartości wejściowe, biorąc pod uwagę, że zostaną wysłane w obiekcie JSON.

Spróbuj wysłać żądanie POST z poświadczeniami użytkownika, a powinieneś otrzymać token w postaci zwykłego tekstu. Ten token API może być przechowywany na urządzeniu mobilnym i używany w nagłówku podczas wysyłania żądań API.

W moim przypadku używam rozszerzenia kodu VS Rest Client, a moja prośba sanctum/tokenjest taka, jak pokazano na zrzucie ekranu poniżej.

Udaj się do bazy danych i powinieneś zobaczyć, że twój token jest przechowywany w personal_access_tokenstabeli.

Sanctum utworzy wiele tokenów za każdym razem, gdy trafisz na sanctum/tokentrasę z poprawnymi danymi uwierzytelniającymi. Jeśli chcesz odwołać poprzedni token, dodaj poniższą instrukcję przed ostatnią instrukcją powrotu powyższego kodu.

// Revoke previous tokens... $user->tokens()->delete();   return $user->createToken($request->input('device_name'))->plainTextToken;

Na koniec chroń trasy, dodając auth:sanctumoprogramowanie pośredniczące w następujący sposób.

Route::middleware('auth:sanctum')->get('/products', function() {     // write a code });

Oprogramowanie pośredniczące sprawdza, czy token został odebrany w nagłówku autoryzacji. Jeśli token API jest poprawny, to tylko on umożliwia przejście do trasy.

Na przykład w kodzie VS możesz wysłać token API jako token Bearer z nagłówkiem Authorization, jak pokazano poniżej.

Mam nadzieję, że rozumiesz, jak zintegrować uwierzytelnianie aplikacji mobilnych za pomocą tokena w Laravelu. Chciałbym usłyszeć wasze przemyślenia i sugestie w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów