Mobiilirakenduste autentimine Tokariga Laravelis
Kas kasutate Laraveli oma mobiilirakenduse tagatipuks? Kui jah, siis ilmselt otsite lihtsat lahendust oma mobiilirakenduse autentimiseks. Paljud kasutajad võivad teie mobiilirakendust kasutada ja soovite oma mobiilikasutajatele sisu esitamiseks autentida. Selles artiklis uurime, kuidas Laravelis sümboolset autentimist teha. Sama lähenemist saate kasutada ka REST API autentimiseks.
Integreerime Laraveli Sanctumi, mis on kerge autentimissüsteem. Võite seda pidada OAuth-põhise autentimise asendajaks.
Sanctumi kasutamise ajal salvestatakse andmebaasi kasutaja API-märgid. See luba tuleb saata Bearer
loana Authorization
päise kaudu oma mobiilirakendusest Laraveli API lõpp-punktidesse. Nendel märkidel on tavaliselt väga pikk aegumisaeg (aastad).
Sellest hoolimata vaatame, kuidas kasutada Sanctumit mobiilirakenduste autentimiseks.
Installige ja konfigureerige Laraveli pühamu
Alustamiseks peate kõigepealt installima oma Laraveli rakendusse Sanctumi paketi. Installige see käsuga:
composer require laravel/sanctum
Pärast seda avaldage Sanctumi konfiguratsiooni- ja migreerimisfailid, käivitades alloleva käsu.
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
Järgmisena käivitage migratsiooni käsk, mis loob personal_access_tokens
teie andmebaasi tabeli. See on tabel, kuhu kõik API-märgid salvestatakse.
php artisan migrate
Vaikimisi nõuab iga Laraveli taotlus csrf-märki. Selle csrf-märgi puudumisel ei jätka Laravel teie taotlust. Kui rääkida Sanctumi abil API-märkide genereerimisest, peame csrf-märgi saatmise vahele jätma. Selleks lisage muutujale sanctum/token
marsruut. Selle marsruudi koostan järgmistes sammudes.$except``app/Http/Middleware/VerifyCsrfToken.php``sanctum/token
<?php
...
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'sanctum/token'
];
}
Autentimise eesmärgil peame kasutajatele väljastama märgi. Niisiis, peate kasutama kasutajamudeli HasApiTokens
omadust järgmiselt.
<?php
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
...
}
API-märkide väljastamine autentimiseks
Igas taotluses koos autoriseerimise päisega kandja loa saatmiseks peab see esmalt välja andma API loa. Kavatsen luua meetodi, mis genereerib igale kasutajale API loa. Loa väljastamiseks peate saatma kasutaja e-posti aadressi, parooli ja seadme.
Lisage allolev marsruut routes/web.php
Route::post('/sanctum/token', 'APITokenController@create_token');
Järgmisena looge kontroller APITokenController
käsuga:
php artisan make:controller APITokenController
Määratlege create_token()
meetod vastloodud kontrolleris järgmiselt.
<?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;
}
}
Ülaltoodud kood kontrollib kõigepealt kasutaja mandaate. Kui mandaadid on õiged, saadab see vastuseks märgi lihttekstivormingus. Siin saan sisendväärtusi, arvestades, et need saadetakse JSON-i objektina.
Proovige saata POST-taotlus koos kasutaja mandaatidega ja peaksite saama lihtteksti märgi. Seda API-märgist võidakse salvestada mobiilseadmesse ja kasutada päises API-taotluste saatmise ajal.
Minu puhul kasutan VS-koodi Rest Client laiendust ja minu taotlus sanctum/token
on selline, nagu allpool ekraanipildil näidatud.
Minge andmebaasi ja peaksite nägema, et teie märk on personal_access_tokens
tabelisse salvestatud .
Sanctum loob mitu märki alati, kui jõuate sanctum/token
marsruudile õigete mandaatidega. Kui soovite eelmise loa tühistada, siis lisage allpool olev lause enne ülaltoodud koodi viimast tagasilauset.
// Revoke previous tokens...
$user->tokens()->delete();
return $user->createToken($request->input('device_name'))->plainTextToken;
Lõpuks kaitske marsruute, lisades auth:sanctum
vahevara järgmiselt.
Route::middleware('auth:sanctum')->get('/products', function() {
// write a code
});
Vahevara kontrollib, kas luba saadakse loa päises. Kui API-luba on õige, lubab marsruudi jätkamist ainult see.
Näiteks võite VS-koodis saata API-loa kandja märgina koos päisega Authorization, nagu allpool näidatud.
Loodan, et saate aru, kuidas integreerida mobiilirakenduste autentimine Laraveli märgi abil. Tahaksin kuulda teie mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.