Mit der Entwicklung der Internettechnologie übernehmen immer mehr Websites eine Front-End- und Back-End-Trennarchitektur. In dieser Architektur kommunizieren Front- und Back-End über API-Schnittstellen. Bei der Verwendung des Laravel-Frameworks zur Entwicklung von API-Schnittstellen treten jedoch bei einigen Benutzern Token-Fehler auf. In diesem Artikel werden die Ursachen und Lösungen für dieses Problem vorgestellt.
Grund für den Token-Fehler
In Laravel ist es eine sehr verbreitete Methode, Token zur Überprüfung der Benutzeridentität in der API-Schnittstelle zu verwenden. Der im Laravel-Framework integrierte Authentifizierungsmechanismus umfasst Token-Vorgänge. Wenn er jedoch nicht richtig konfiguriert ist, führt dies zu Token-Fehlern.
Im Allgemeinen können Token-Fehler in den folgenden zwei Situationen auftreten:
Token verwendet eine Technologie namens JWT (JSON Web Token), ein leichtgewichtiges Format, das auf einem Identitätsauthentifizierungsmechanismus auf JSON-Ebene basiert. Im Laravel-Framework beträgt die Token-Gültigkeitsdauer standardmäßig 1 Stunde. Wenn das Token nach Ablauf der Ablaufzeit verwendet wird, wird ein Token-Ablauffehler zurückgegeben.
Wenn ein ungültiges Token verwendet oder kein Token bereitgestellt wird, wird der Fehler „Token-Authentifizierung fehlgeschlagen“ zurückgegeben.
Lösung
Als nächstes stellen wir verschiedene Methoden zur Behebung von Token-Fehlern vor.
Die Verlängerung der Gültigkeitsdauer von Token ist eine relativ einfache Lösung. In Laravel muss die Änderung der Gültigkeitsdauer des Tokens in der Datei config/jwt.php konfiguriert werden. Öffnen Sie diese Datei und ändern Sie den Parameter TTN_TTL auf den erforderlichen Gültigkeitszeitraum.
In Laravel gibt es einige Klassenbibliotheken, die uns bei der Bewältigung von Token-bezogenen Problemen helfen können. Beispielsweise bieten Spatie/laravel-jwt, tymon/jwt-auth usw. sehr praktische Lösungen.
Im Folgenden erklären wir am Beispiel von spatie/laravel-jwt, wie die Methoden in der Klassenbibliothek zur Handhabung der Token-Fehlermeldung verwendet werden.
Führen Sie zunächst spatie/laravel-jwt in das Projekt ein:
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 seller:publish - - anbieter="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()
verwenden. Ruft die Benutzerinformationen ab, die dem Token entsprechen.
Maßgeschneiderte Middleware
Schließlich können Sie das Problem der Token-Fehlerberichterstattung auch durch die Anpassung der Middleware lösen. Das Anpassen der Middleware in Laravel ist sehr einfach. Sie müssen sie nur über den Befehl „Artisan“ erstellen. Bevor Sie mit der Erstellung von Middleware beginnen, gibt es eine Voraussetzung: Sie müssen den Ausführungsprozess der Laravel-Middleware verstehen. Einfach ausgedrückt ist der Ausführungsprozess der Laravel-Middleware wie folgt:Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Ursachen und Lösungen der Laravel-Token-Fehlermeldung sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!