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 - Controller
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); } }
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(); });
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!