Maison  >  Article  >  cadre php  >  Parlons des causes et des solutions du rapport d'erreurs du jeton Laravel

Parlons des causes et des solutions du rapport d'erreurs du jeton Laravel

PHPz
PHPzoriginal
2023-04-06 16:44:151865parcourir

Avec le développement de la technologie Internet, de plus en plus de sites Web adoptent une architecture de séparation front-end et back-end. Dans cette architecture, les front-end et back-end communiquent via des interfaces API. Cependant, lors de l'utilisation du framework Laravel pour développer des interfaces API, certains utilisateurs rencontreront des erreurs de jeton. Cet article présentera les causes et les solutions à ce problème.

Raison de l'erreur de jeton

Dans Laravel, il s'agit d'un moyen très courant d'utiliser Token pour vérifier l'identité de l'utilisateur dans l'interface API. Le mécanisme d'authentification intégré au framework Laravel inclut les opérations de jeton, mais s'il n'est pas configuré correctement, cela provoquera des erreurs de jeton.

De manière générale, des erreurs de jeton peuvent survenir dans les deux situations suivantes :

  1. Le jeton expire

Le jeton utilise une technologie appelée JWT (JSON Web Token), qui est un format léger basé sur un mécanisme d'authentification d'identité au niveau JSON. Dans le framework Laravel, la durée de validité du token est de 1 heure par défaut. Si le jeton est utilisé après le délai d'expiration, une erreur d'expiration du jeton sera renvoyée.

  1. Échec de l'authentification du jeton

Lorsqu'un jeton non valide est utilisé ou qu'aucun jeton n'est fourni, une erreur d'échec de l'authentification du jeton sera renvoyée.

Solution

Ensuite, nous présenterons plusieurs méthodes pour résoudre les erreurs de jeton.

  1. Prolonger la période de validité du Token

Prolonger la période de validité du Token est une solution relativement simple. Dans Laravel, la modification de la période de validité du Token doit être configurée dans le fichier config/jwt.php. Ouvrez ce fichier et modifiez le paramètre TTN_TTL sur la période de validité requise.

  1. Présentation des bibliothèques de classes associées

Dans Laravel, certaines bibliothèques de classes peuvent nous aider à résoudre les problèmes liés aux jetons. Par exemple, spatie/laravel-jwt, tymon/jwt-auth, etc., ces bibliothèques fournissent des solutions très pratiques.

Ci-dessous, en prenant spatie/laravel-jwt comme exemple, nous expliquerons comment utiliser les méthodes de la bibliothèque de classes pour gérer les problèmes d'erreur de jeton.

Tout d'abord, introduisez spatie/laravel-jwt dans le projet :

composer require spatie/laravel-jwtcomposer require spatie/laravel-jwt

然后,发布配置文件:

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

接下来,在 AuthServiceProvider.php 文件中注册 JwtAuthGuard 对应的验证守卫:

public function boot()
{
    $this->registerPolicies();

    Auth::extend('jwt', function ($app, $name, array $config) {
        return new JwtAuthGuard($app[GuardHelper::class], $app['request']);
    });
}

最后,在 config/auth.php 文件中配置:

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

这样,就可以使用 Auth::guard('api')->user()

Publiez ensuite le fichier de configuration :
  1. php artisan supplier:publish - - supplier="SpatieJwtJwtServiceProvider"
Ensuite, enregistrez le garde d'authentification correspondant à JwtAuthGuard dans le fichier AuthServiceProvider.php :

Middleware 1 - (如果存在)Middleware 2 - (如果存在)Middleware 3 - Controller
Enfin, configurez-le dans le fichier config/auth.php :

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as AuthFactory;

class TokenAuth
{
    protected $auth;

    public function __construct(AuthFactory $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next)
    {
        try {
            $user = $this->auth->guard('api')->user();
        } catch (\Throwable $e) {
            return response()->json(['error' => 'Token 认证失败'], 401);
        }

        if (!$user) {
            return response()->json(['error' => 'Token 非法'], 401);
        }

        return $next($request);
    }
}
De cette façon , vous pouvez utiliser Auth::guard('api')->user() Obtient les informations utilisateur correspondant au Token.

Middleware personnalisé

Enfin, vous pouvez également résoudre le problème du rapport d'erreurs de jeton en personnalisant le middleware. La personnalisation du middleware dans Laravel est très simple, il vous suffit de le créer via la commande artisan.

Avant de commencer à créer un middleware, il y a un prérequis : vous devez avoir une compréhension du processus d'exécution du middleware Laravel. En termes simples, le processus d'exécution du middleware Laravel est le suivant :

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Pour parler franchement, il s'agit d'une structure de pile. Avant d'exécuter la méthode Controller, vous pouvez écrire une logique de vérification de jeton personnalisée dans le middleware. Si la vérification du jeton échoue, renvoyez simplement un message d'erreur directement.

Ce qui suit est un exemple : 🎜rrreee🎜Dans la route du contrôleur, utilisez simplement le middleware : 🎜rrreee🎜De cette façon, lors de l'accès à la route ci-dessus, le middleware personnalisé TokenAuth sera exécuté en premier si l'authentification par jeton échoue. , Un message d'erreur sera renvoyé. 🎜🎜Résumé🎜🎜Le rapport d'erreurs de jetons est un problème relativement courant, mais tant que vous en comprenez la cause, vous pouvez prendre les mesures appropriées pour le résoudre. Cet article explique comment prolonger la période de validité du jeton, introduire les bibliothèques de classes associées et personnaliser le middleware pour résoudre le problème du rapport d'erreurs du jeton. Ces méthodes sont relativement pratiques, et les développeurs peuvent choisir la méthode qui leur convient en fonction de leur situation réelle. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn