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 :
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.
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.
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.
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-jwt
composer 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()
php artisan supplier:publish - - supplier="SpatieJwtJwtServiceProvider"
Middleware 1 - (如果存在)Middleware 2 - (如果存在)Middleware 3 - ControllerEnfin, 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!