✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Autenticazione dell’applicazione mobile tramite token in Laravel

106

Stai usando Laravel per il back-end della tua applicazione mobile? Se sì, probabilmente stai cercando una soluzione semplice per l’autenticazione della tua applicazione mobile. Molti utenti possono utilizzare la tua app mobile e tu desideri eseguire l’autenticazione per offrire contenuti ai tuoi utenti mobili. In questo articolo, studiamo come eseguire l’autenticazione basata su token in Laravel. Puoi anche usare lo stesso approccio per l’autenticazione dell’API REST.

Stiamo andando ad integrare laravel Sanctum, che è un sistema di autenticazione leggero. Puoi considerarlo come un sostituto dell’autenticazione basata su OAuth.

Durante l’utilizzo di Sanctum, i token API dell’utente vengono archiviati nel database. Questo token deve essere inviato come Bearertoken tramite Authorizationintestazione dalla tua applicazione mobile agli endpoint dell’API Laravel. Questi token hanno in genere una scadenza molto lunga (anni).

Detto questo, diamo un’occhiata a come utilizzare Sanctum per l’autenticazione delle applicazioni mobili.

Installa e configura Laravel Sanctum

Per iniziare, devi prima installare un pacchetto Sanctum nella tua applicazione Laravel. Installalo usando il comando:

composer require laravel/sanctum

Successivamente, pubblica i file di configurazione e migrazione di Sanctum eseguendo il comando seguente.

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

Quindi, esegui il comando di migrazione che creerà una personal_access_tokenstabella nel tuo database. Questa è la tabella in cui verranno archiviati tutti i token API.

php artisan migrate

Per impostazione predefinita, ogni richiesta in Laravel richiede un token csrf. In caso di mancanza di questo token csrf, Laravel non procederà con la tua richiesta. Quando si tratta di generare token API utilizzando Sanctum, dobbiamo saltare l’invio del token csrf. Per questo, aggiungi sanctum/tokenroute alla $exceptvariabile di app/Http/Middleware/VerifyCsrfToken.php. Creerò questo sanctum/tokenpercorso nei passaggi successivi.

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

Ai fini dell’autenticazione, dobbiamo emettere un token agli utenti. Quindi, devi usare il HasApiTokenstratto per il modello Utente come segue.

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

Emissione di token API per l’autenticazione

Per inviare un token Bearer con l’intestazione Authorization in ogni richiesta, è necessario prima emettere un token API. Creerò un metodo che genera un token API per ogni utente. Per emettere un token, ti verrà richiesto di inviare l’e-mail, la password e il dispositivo di un utente.

Aggiungi il percorso sottostante nel routes/web.php

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

Quindi, crea un controller APITokenControllercon il comando:

php artisan make:controller APITokenController

Definire il create_token()metodo nel controller appena creato come segue.

<?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;
    }
}

Il codice precedente verifica innanzitutto le credenziali dell’utente. Se le credenziali sono corrette, in risposta invia un token in un formato di testo normale. Qui, sto ricevendo valori di input considerando che verranno inviati in un oggetto JSON.

Prova a inviare una richiesta POST con le credenziali dell’utente e dovresti ricevere il token di testo normale. Questo token API può essere archiviato sul dispositivo mobile e utilizzato in un’intestazione durante l’invio di richieste API.

Nel mio caso, utilizzo l’ estensione Rest Client del codice VS e la mia richiesta sanctum/tokenè come mostrato nello screenshot qui sotto.

Vai al database e dovresti vedere che il tuo token è memorizzato nella personal_access_tokenstabella.

Sanctum creerà più token ogni volta che raggiungi il sanctum/tokenpercorso con le credenziali corrette. Se vuoi revocare il token precedente, aggiungi l’istruzione seguente prima dell’ultima istruzione di ritorno del codice precedente.

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

Infine, proteggi le route aggiungendo il auth:sanctummiddleware come segue.

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

Il middleware convalida se il token viene ricevuto in un’intestazione di autorizzazione. Se il token API è corretto, solo consente di procedere per il percorso.

Ad esempio, nel codice VS è possibile inviare il token API come token Bearer con l’intestazione di autorizzazione come mostrato di seguito.

Spero che tu capisca come integrare l’autenticazione dell’applicazione mobile utilizzando un token in Laravel. Mi piacerebbe sentire i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More