Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Authentification d’application mobile à l’aide d’un jeton dans Laravel

142

Utilisez-vous Laravel pour le back-end de votre application mobile? Si oui, vous recherchez probablement une solution simple pour l’authentification de votre application mobile. De nombreux utilisateurs peuvent utiliser votre application mobile et vous souhaitez procéder à une authentification afin de fournir du contenu à vos utilisateurs mobiles. Dans cet article, nous étudions comment effectuer une authentification basée sur des jetons dans Laravel. Vous pouvez également utiliser la même approche pour l’authentification API REST.

Nous allons intégrer Laravel Sanctum qui est un système d’authentification léger. Vous pouvez le considérer comme un remplacement pour l’authentification basée sur OAuth.

Lors de l’utilisation de Sanctum, les jetons API de l’utilisateur sont stockés dans la base de données. Ce jeton doit être envoyé sous forme de Bearerjeton via un en- Authorizationtête depuis votre application mobile vers les points de terminaison de l’API Laravel. Ces jetons ont généralement un délai d’expiration très long (années).

Cela étant dit, voyons comment utiliser Sanctum pour authentifier les applications mobiles.

Installer et configurer Laravel Sanctum

Pour commencer, vous devez d’abord installer un package Sanctum sur votre application Laravel. Installez-le à l’aide de la commande :

composer require laravel/sanctum

Après cela, publiez les fichiers de configuration et de migration de Sanctum en exécutant la commande ci-dessous.

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

Ensuite, exécutez la commande de migration qui créera une personal_access_tokenstable dans votre base de données. Il s’agit de la table où tous les jetons d’API seront stockés.

php artisan migrate

Par défaut, chaque requête dans Laravel nécessite un jeton csrf. En cas de manque de ce jeton csrf, Laravel ne donne pas suite à votre demande. Lorsqu’il s’agit de générer des jetons d’API à l’aide de Sanctum, nous devons ignorer l’envoi du jeton csrf. Pour cela, ajoutez sanctum/tokenroute à la $exceptvariable de app/Http/Middleware/VerifyCsrfToken.php. Je vais créer cet sanctum/tokenitinéraire dans les prochaines étapes.

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

À des fins d’authentification, nous devons émettre un jeton pour les utilisateurs. Ainsi, vous devez utiliser le HasApiTokenstrait pour le modèle User comme suit.

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

Émission de jetons d’API pour l’authentification

Afin d’envoyer un jeton Bearer avec l’en-tête Authorization dans chaque requête, il faut d’abord émettre un jeton API. Je vais créer une méthode qui génère un jeton API pour chaque utilisateur. Pour émettre un jeton, vous devrez envoyer l’e-mail, le mot de passe et l’appareil d’un utilisateur.

Ajoutez l’itinéraire ci-dessous dans le routes/web.php

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

Ensuite, créez un contrôleur APITokenControllerpar la commande :

php artisan make:controller APITokenController

Définissez la create_token()méthode dans le contrôleur nouvellement créé comme suit.

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

Le code ci-dessus vérifie d’abord les informations d’identification de l’utilisateur. Si les informations d’identification sont correctes, il envoie en réponse un jeton au format texte brut. Ici, je reçois des valeurs d’entrée étant donné qu’elles seront envoyées dans un objet JSON.

Essayez d’envoyer une requête POST avec les informations d’identification de l’utilisateur et vous devriez recevoir le jeton en texte brut. Ce jeton API peut être stocké sur l’appareil mobile et utilisé dans un en-tête lors de l’envoi de requêtes API.

Dans mon cas, j’utilise l’ extension Rest Client du code VS et ma demande sanctum/tokenest comme indiqué dans la capture d’écran ci-dessous.

Rendez-vous dans la base de données et vous devriez voir que votre jeton est stocké dans la personal_access_tokenstable.

Sanctum créera plusieurs jetons chaque fois que vous emprunterez la sanctum/tokenroute avec les informations d’identification correctes. Si vous souhaitez révoquer le jeton précédent, ajoutez l’instruction ci-dessous avant la dernière instruction de retour du code ci-dessus.

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

Enfin, protégez les routes en ajoutant le auth:sanctummiddleware comme suit.

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

Le middleware valide si le jeton est reçu dans un en-tête d’autorisation. Si le jeton API est correct, alors seul il permet de poursuivre la route.

Par exemple, dans le code VS, vous pouvez envoyer le jeton API en tant que jeton Bearer avec l’en-tête d’autorisation, comme indiqué ci-dessous.

J’espère que vous comprenez comment intégrer l’authentification des applications mobiles à l’aide d’un jeton dans Laravel. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails