Authentifizierung mobiler Anwendungen mit Token in Laravel
Verwenden Sie Laravel für das Backend Ihrer mobilen Anwendung? Wenn ja, dann suchen Sie wahrscheinlich nach einer einfachen Lösung für die Authentifizierung Ihrer mobilen Anwendung. Viele Benutzer können Ihre mobile App verwenden und Sie möchten eine Authentifizierung durchführen, um Ihren mobilen Benutzern Inhalte bereitzustellen. In diesem Artikel untersuchen wir, wie eine tokenbasierte Authentifizierung in Laravel durchgeführt wird. Sie können denselben Ansatz auch für die REST-API-Authentifizierung verwenden.
Wir werden Laravel Sanctum integrieren, ein leichtgewichtiges Authentifizierungssystem. Sie können es als Ersatz für die OAuth-basierte Authentifizierung betrachten.
Während der Nutzung von Sanctum werden die API-Token des Benutzers in der Datenbank gespeichert. Dieses Token muss als Bearer
Token per Authorization
Header von Ihrer mobilen Anwendung an die Laravel-API-Endpunkte gesendet werden. Diese Token haben normalerweise eine sehr lange Ablaufzeit (Jahre).
Lassen Sie uns jedoch einen Blick darauf werfen, wie Sie Sanctum zur Authentifizierung mobiler Anwendungen verwenden.
Installieren und konfigurieren Sie Laravel Sanctum
Um loszulegen, müssen Sie zunächst ein Sanctum-Paket in Ihrer Laravel-Anwendung installieren. Installieren Sie es mit dem Befehl:
composer require laravel/sanctum
Veröffentlichen Sie danach die Konfigurations- und Migrationsdateien von Sanctum, indem Sie den folgenden Befehl ausführen.
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
Führen Sie als Nächstes den Migrationsbefehl aus, der eine personal_access_tokens
Tabelle in Ihrer Datenbank erstellt. Dies ist die Tabelle, in der alle API-Token gespeichert werden.
php artisan migrate
Standardmäßig erfordert jede Anforderung in Laravel ein csrf-Token. Falls dieses csrf-Token fehlt, wird Laravel Ihre Anfrage nicht bearbeiten. Wenn es darum geht, API-Token mit Sanctum zu generieren, müssen wir das Senden des csrf-Tokens überspringen. Fügen Sie dazu sanctum/token
route zur $except
Variablen von hinzu app/Http/Middleware/VerifyCsrfToken.php
. Diese sanctum/token
Route werde ich in den nächsten Schritten erstellen .
<?php
...
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'sanctum/token'
];
}
Zu Authentifizierungszwecken müssen wir den Benutzern ein Token ausstellen. Sie müssen also das HasApiTokens
Merkmal für das Benutzermodell wie folgt verwenden.
<?php
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
...
}
Ausgeben von API-Token für die Authentifizierung
Um in jeder Anfrage ein Bearer-Token mit dem Authorization-Header zu senden, muss zunächst ein API-Token ausgestellt werden. Ich werde eine Methode erstellen, die für jeden Benutzer ein API-Token generiert. Um ein Token auszustellen, müssen Sie die E-Mail, das Passwort und das Gerät eines Benutzers senden.
Fügen Sie die unten stehende Route in die routes/web.php
Route::post('/sanctum/token', 'APITokenController@create_token');
Erstellen Sie als Nächstes einen Controller APITokenController
mit dem Befehl:
php artisan make:controller APITokenController
Definieren Sie die create_token()
Methode im neu erstellten Controller wie folgt.
<?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;
}
}
Der obige Code überprüft zuerst die Anmeldeinformationen des Benutzers. Wenn die Anmeldeinformationen korrekt sind, wird als Antwort ein Token im Nur-Text-Format gesendet. Hier erhalte ich Eingabewerte, da sie in einem JSON-Objekt gesendet werden.
Versuchen Sie, eine POST-Anfrage mit den Anmeldeinformationen des Benutzers zu senden, und Sie sollten das Nur-Text-Token erhalten. Dieses API-Token kann auf dem Mobilgerät gespeichert und beim Senden von API-Anfragen in einem Header verwendet werden.
In meinem Fall verwende ich die Rest Client-Erweiterung des VS-Codes und meine Anfrage an sanctum/token
ist wie im Screenshot unten gezeigt.
Gehen Sie zur Datenbank und Sie sollten sehen, dass Ihr Token in der personal_access_tokens
Tabelle gespeichert ist .
Sanctum erstellt mehrere Token, wenn Sie die sanctum/token
Route mit den richtigen Anmeldeinformationen betreten. Wenn Sie das vorherige Token widerrufen möchten, fügen Sie die folgende Anweisung vor der letzten Rückgabeanweisung des obigen Codes hinzu.
// Revoke previous tokens...
$user->tokens()->delete();
return $user->createToken($request->input('device_name'))->plainTextToken;
Schützen Sie schließlich die Routen, indem Sie die auth:sanctum
Middleware wie folgt hinzufügen .
Route::middleware('auth:sanctum')->get('/products', function() {
// write a code
});
Die Middleware überprüft, ob das Token in einem Authorization-Header empfangen wird. Wenn das API-Token korrekt ist, kann nur die Route fortgesetzt werden.
Als Beispiel können Sie im VS-Code das API-Token als Bearer-Token mit dem Authorization-Header senden, wie unten gezeigt.
Ich hoffe, Sie verstehen, wie Sie die Authentifizierung mobiler Anwendungen mithilfe eines Tokens in Laravel integrieren. Ich würde gerne Ihre Gedanken und Vorschläge im Kommentarbereich unten hören.
Zum Thema passende Artikel
- So erstellen Sie einen Blog mit Laravel
- Eine Anleitung zum Hinzufügen von Google reCAPTCHA v3 zu Ihrer Laravel-Website
- So laden Sie Videos auf YouTube in der Laravel-Anwendung hoch