✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Authentifizierung mobiler Anwendungen mit Token in Laravel

64

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 BearerToken per AuthorizationHeader 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_tokensTabelle 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/tokenroute zur $exceptVariablen von hinzu app/Http/Middleware/VerifyCsrfToken.php. Diese sanctum/tokenRoute 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 HasApiTokensMerkmal 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 APITokenControllermit 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/tokenist wie im Screenshot unten gezeigt.

Gehen Sie zur Datenbank und Sie sollten sehen, dass Ihr Token in der personal_access_tokensTabelle gespeichert ist .

Sanctum erstellt mehrere Token, wenn Sie die sanctum/tokenRoute 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:sanctumMiddleware 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

Aufnahmequelle: artisansweb.net

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen