✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Mobiilisovelluksen todennus Tokenilla Laravelissa

15

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ä Bearertunnuksena Authorizationotsikon 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_tokenstaulukon 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/tokenreitti $exceptmuuttujaan app/Http/Middleware/VerifyCsrfToken.php. Luon tämän sanctum/tokenreitin 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ä HasApiTokensominaisuutta 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 APITokenControllerkomennolla:

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/tokenon alla olevan kuvakaappauksen mukainen.

Siirry tietokantaan ja sinun pitäisi nähdä, että tunnuksesi on tallennettu personal_access_tokenstaulukkoon.

Sanctum luo useita tunnuksia aina, kun lyöt sanctum/tokenreittiä 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:sanctumvä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.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja