✅ 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

102

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