ホームページ  >  記事  >  PHPフレームワーク  >  laravelトークンエラーレポートの原因と解決策について話しましょう

laravelトークンエラーレポートの原因と解決策について話しましょう

PHPz
PHPzオリジナル
2023-04-06 16:44:151884ブラウズ

インターネット技術の発展に伴い、フロントエンドとバックエンドの分離アーキテクチャを採用する Web サイトが増えています。このアーキテクチャでは、フロントエンドとバックエンドは API インターフェイスを通じて通信します。ただし、Laravel フレームワークを使用して API インターフェイスを開発する場合、一部のユーザーはトークン エラーの問題に遭遇します。この記事では、この問題の原因と解決策を紹介します。

トークンエラーの原因

Laravelでは、APIインターフェースでトークンを使用してユーザーIDを確認するのが非常に一般的な方法です。 Laravel フレームワークの組み込み認証メカニズムにはトークン操作が含まれていますが、正しく構成されていない場合はトークン エラーが発生します。

一般的に、トークン エラーは次の 2 つの状況で発生する可能性があります:

  1. トークンの有効期限が切れる

トークンは JWT (JSON Web Token) と呼ばれるメソッドを使用します。これは、JSON 形式に基づく軽量の ID 認証メカニズムです。 Laravel フレームワークでは、トークンの有効期間はデフォルトで 1 時間です。トークンが有効期限を過ぎて使用されると、トークン有効期限エラーが返されます。

  1. トークン認証の失敗

無効なトークンが使用された場合、またはトークンが提供されなかった場合、トークン認証の失敗エラーが返されます。

解決策

次に、トークンエラーを解決するためのいくつかの方法を紹介します。

  1. トークンの有効期間を延長する

トークンの有効期間を延長するのは比較的簡単な解決策です。 Laravel では、トークンの有効期間を変更するには config/jwt.php ファイルで設定する必要があります。このファイルを開き、TTN_TTL パラメータを必要な有効期間に変更します。

  1. 関連するクラス ライブラリの紹介

Laravel には、トークン関連の問題に対処するのに役立つクラス ライブラリがいくつかあります。たとえば、spatie/laravel-jwt、tymon/jwt-auth など、これらのライブラリは非常に便利なソリューションを提供します。

以下では、spatie/laravel-jwt を例として、クラス ライブラリのメソッドを使用してトークン エラーのレポートを処理する方法を説明します。

まず、プロジェクトに spatie/laravel-jwt を導入します:

composer require spatie/laravel-jwt

次に、設定ファイルを公開します:

php 職人のベンダー:パブリッシュ --provider="Spatie\Jwt\JwtServiceProvider"

次に、JwtAuthGuard に対応する認証ガードを AuthServiceProvider.php ファイルに登録します。

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( ) Tokenに対応するユーザー情報を取得します。

  1. カスタマイズされたミドルウェア

最後に、ミドルウェアをカスタマイズすることで、トークン エラーのレポートの問題を解決することもできます。 Laravel でのミドルウェアのカスタマイズは非常に簡単で、artisan コマンドを使用して作成するだけです。

ミドルウェアの作成を開始する前に、前提条件があります。Laravel ミドルウェアの実行プロセスを理解している必要があります。 Laravelミドルウェアの実行プロセスは簡単に言うと以下の通りです。

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

コントローラのルーティングでは、ミドルウェアを使用するだけです:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

このようにして、上記のルートにアクセスすると、最初に実行されます。 TokenAuth カスタム ミドルウェアは、トークン認証が失敗した場合にエラー プロンプトを返します。

概要

トークン エラーのレポートは比較的一般的な問題ですが、原因を理解していれば、適切な解決策を講じることができます。この記事では、トークンの有効期間を延長し、関連するクラス ライブラリを導入し、ミドルウェアをカスタマイズしてトークンのエラー報告の問題を解決する方法を紹介します。これらの方法は比較的実用的であり、開発者は実際の状況に応じて適切な方法を選択できます。

以上がlaravelトークンエラーレポートの原因と解決策について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。