Autentisering av mobilapplikation med Token i Laravel
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 Bearer
token via Authorization
rubrik 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_tokens
tabell 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/token
rutt till $except
variabeln app/Http/Middleware/VerifyCsrfToken.php
. Jag kommer att skapa den här sanctum/token
rutten 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 HasApiTokens
egenskaper 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 APITokenController
med 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_tokens
tabellen.
Sanctum kommer att skapa flera tokens när du når sanctum/token
rutten 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:sanctum
mellanvaran 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
- Hur man skapar en blogg med Laravel
- En guide om hur du lägger till Google reCAPTCHA v3 till din Laravel-webbplats
- Hur laddar jag upp video på YouTube i Laravel-applikationen