Mobiilisovelluksen todennus Tokenilla Laravelissa
Käytätkö Laravelia mobiilisovelluksesi taustana? Jos kyllä, niin luultavasti etsit helppoa ratkaisua mobiilisovelluksesi todennukseen. Monet käyttäjät voivat käyttää mobiilisovellustasi ja haluat tehdä todentamisen palvelemaan sisältöä mobiilikäyttäjillesi. Tässä artikkelissa tutkitaan, miten tunnuspohjainen todennus tehdään Laravelissa. Voit käyttää samaa lähestymistapaa myös REST API-todennuksessa.
Aiomme integroida Laravel Sanctumin, joka on kevyt todennusjärjestelmä. Voit pitää sitä OAuth-pohjaisen todennuksen korvaajana.
Sanctumia käytettäessä käyttäjän API-tunnukset tallennetaan tietokantaan. Tämä tunnus on lähetettävä Bearer
tunnuksena Authorization
otsikon kautta mobiilisovelluksestasi Laravel-sovellusliittymän päätepisteisiin. Näillä rahakkeilla on tyypillisesti hyvin pitkä vanhentumisaika (vuotta).
Tästä huolimatta katsotaanpa, miten Sanctumia voidaan käyttää mobiilisovellusten todentamiseen.
Asenna ja määritä Laravel Sanctum
Aloittamiseksi sinun on ensin asennettava Sanctum-paketti Laravel-sovellukseesi. Asenna se komennolla:
composer require laravel/sanctum
Tämän jälkeen julkaise Sanctumin kokoonpano- ja siirtotiedostot suorittamalla alla oleva komento.
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
Suorita seuraavaksi siirtokomento, joka luo personal_access_tokens
taulukon tietokantaan. Tämä on taulukko, johon kaikki API-tunnukset tallennetaan.
php artisan migrate
Oletusarvoisesti kukin Laravelin pyyntö vaatii csrf-tunnuksen. Jos tämä csrf-tunnus puuttuu, Laravel ei jatka pyyntöäsi. Kun on kyse API-tunnusten luomisesta Sanctumin avulla, meidän on ohitettava csrf-tunnuksen lähettäminen. Lisää tätä varten sanctum/token
reitti $except
muuttujaan app/Http/Middleware/VerifyCsrfToken.php
. Luon tämän sanctum/token
reitin seuraavissa vaiheissa.
<?php
...
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'sanctum/token'
];
}
Todentamista varten meidän on annettava käyttäjille tunnus. Joten sinun on käytettävä HasApiTokens
ominaisuutta käyttäjämalliin seuraavasti.
<?php
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
...
}
API-tunnusten myöntäminen todennusta varten
Bearer-tunnuksen lähettäminen valtuutusotsakkeella jokaisessa pyynnössä edellyttää ensin API-tunnuksen myöntämistä. Aion luoda menetelmän, joka luo API-tunnuksen jokaiselle käyttäjälle. Tunnuksen antamiseksi sinun on lähetettävä käyttäjän sähköposti, salasana ja laite.
Lisää alla oleva reitti routes/web.php
Route::post('/sanctum/token', 'APITokenController@create_token');
Luo seuraavaksi ohjain APITokenController
komennolla:
php artisan make:controller APITokenController
Määritä create_token()
menetelmä uudessa ohjaimessa seuraavasti.
<?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;
}
}
Yllä oleva koodi tarkistaa ensin käyttäjän tunnistetiedot. Jos tunnistetiedot ovat oikein, se lähettää vastauksena pelkkän tekstimuodon mukaisen tunnuksen. Tässä saan tuloarvoja, koska ne lähetetään JSON-objektissa.
Yritä lähettää POST-pyyntö käyttäjän kirjautumistiedoilla, ja sinun pitäisi saada pelkkän tekstin tunnus. Tätä API-tunnusta voidaan tallentaa mobiililaitteeseen ja käyttää otsikossa API-pyyntöjä lähetettäessä.
Minun tapauksessani käytän VS-koodin Rest Client -laajennusta ja pyyntöni sanctum/token
on alla olevan kuvakaappauksen mukainen.
Siirry tietokantaan ja sinun pitäisi nähdä, että tunnuksesi on tallennettu personal_access_tokens
taulukkoon.
Sanctum luo useita tunnuksia aina, kun lyöt sanctum/token
reittiä oikeilla tunnistetiedoilla. Jos haluat kumota edellisen tunnuksen, lisää seuraava lauseke edellisen koodin viimeisen palautuslausekkeen eteen.
// Revoke previous tokens...
$user->tokens()->delete();
return $user->createToken($request->input('device_name'))->plainTextToken;
Suojaa lopuksi reitit lisäämällä auth:sanctum
väliohjelmisto seuraavasti.
Route::middleware('auth:sanctum')->get('/products', function() {
// write a code
});
Väliohjelmisto tarkistaa, onko tunniste vastaanotettu Valtuutus-otsikossa. Jos API-tunnus on oikea, vain se sallii reitin etenemisen.
Esimerkiksi VS-koodissa voit lähettää API-tunnuksen Bearer-tunnukseksi Authorization-otsikossa alla olevan kuvan mukaisesti.
Toivon, että ymmärrät, kuinka integroida mobiilisovelluksen todennus tunnuksen avulla Laravelissa. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.