Autenticazione dell’applicazione mobile tramite token in Laravel
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 Bearer
token tramite Authorization
intestazione 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_tokens
tabella 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/token
route alla $except
variabile di app/Http/Middleware/VerifyCsrfToken.php
. Creerò questo sanctum/token
percorso 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 HasApiTokens
tratto 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 APITokenController
con 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_tokens
tabella.
Sanctum creerà più token ogni volta che raggiungi il sanctum/token
percorso 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:sanctum
middleware 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
- Come creare un blog con Laravel
- Una guida sull’aggiunta di Google reCAPTCHA v3 al tuo sito web Laravel
- Come caricare video su YouTube nell’applicazione Laravel