...
✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Autentisering av mobilapplikation med Token i Laravel

18

Använder du Laravel för baksidan av din mobilapp? Om ja, förmodligen letar du efter en enkel lösning för din mobilappsverifiering. Många användare kan använda din mobilapp och du vill göra autentisering för att kunna visa innehåll till dina mobilanvändare. I den här artikeln studerar vi hur man gör tokenbaserad autentisering i Laravel. Du kan också använda samma metod för REST API-autentisering.

Vi ska integrera Laravel Sanctum, som är ett lätt autentiseringssystem. Du kan betrakta det som en ersättning för OAuth-baserad autentisering.

När du använder Sanctum lagras användarens API-token i databasen. Den här token måste skickas som Bearertoken via Authorizationrubrik från din mobilapplikation till Laravel API-slutpunkter. Dessa tokens har vanligtvis en mycket lång utgångstid (år).

Med det sagt, låt oss ta en titt på hur man använder Sanctum för att autentisera mobilapplikationer.

Installera och konfigurera Laravel Sanctum

För att komma igång måste du först installera ett Sanctum-paket i din Laravel-applikation. Installera det med kommandot:

composer require laravel/sanctum

Efter detta, publicera konfigurations- och migreringsfilerna för Sanctum genom att köra kommandot nedan.

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

Kör sedan migreringskommandot som skapar en personal_access_tokenstabell i din databas. Detta är tabellen där alla API-tokens kommer att lagras.

php artisan migrate

Som standard kräver varje begäran i Laravel en csrf-token. Om den här csrf-token saknas fortsätter Laravel inte med din begäran. När det gäller att generera API-tokens med hjälp av Sanctum, måste vi hoppa över att skicka csrf-token. För detta, lägg till sanctum/tokenrutt till $exceptvariabeln app/Http/Middleware/VerifyCsrfToken.php. Jag kommer att skapa den här sanctum/tokenrutten i nästa steg.

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

För autentiseringsändamål måste vi utfärda en token till användarna. Så du måste använda HasApiTokensegenskaper för användarmodellen enligt följande.

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

Utfärdar API-token för autentisering

För att skicka en Bearer-token med behörighetsrubriken i varje begäran, måste den först utfärda en API-token. Jag ska skapa en metod som genererar en API-token för varje användare. För att utfärda en token måste du skicka e-postadress, lösenord och enhet för en användare.

Lägg till rutten nedan i routes/web.php

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

Skapa sedan en styrenhet APITokenControllermed kommandot:

php artisan make:controller APITokenController

Definiera create_token()metoden i den nyskapade styrenheten enligt följande.

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

Ovanstående kod kontrollerar först efter användarens referenser. Om autentiseringsuppgifterna är korrekta skickar den som svar en token i klartextformat. Här får jag inmatningsvärden med tanke på att de kommer att skickas i ett JSON-objekt.

Försök att skicka en POST-begäran med användarens autentiseringsuppgifter och du bör få token för ren text. Denna API-token kan lagras på den mobila enheten och användas i en rubrik när API-förfrågningar skickas.

I mitt fall använder jag Rest Client-tillägg av VS-kod och min begäran till sanctum/tokenär som visas i skärmdumpen nedan.

Gå över till databasen och du bör se att din token är lagrad i personal_access_tokenstabellen.

Sanctum kommer att skapa flera tokens när du når sanctum/tokenrutten med korrekta referenser. Om du vill återkalla den föregående token, lägg till nedanstående uttalande före den sista returdeklarationen för ovanstående kod.

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

Slutligen, skydda rutterna genom att lägga till auth:sanctummellanvaran enligt följande.

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

Mellanvaran validerar om token tas emot i ett behörighetshuvud. Om API-token är korrekt är det bara tillåtet att fortsätta för rutten.

Som ett exempel kan du i VS-kod skicka API-token som en bärartoken med auktoriseringshuvudet som visas nedan.

Jag hoppas att du förstår hur du integrerar mobilappsautentisering med hjälp av en token i Laravel. Jag skulle vilja höra dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer