ホームページ  >  記事  >  PHPフレームワーク  >  Laravelトークンリポジトリ?

Laravelトークンリポジトリ?

PHPz
PHPzオリジナル
2023-03-31 16:19:59747ブラウズ

Laravel トークン リポジトリ?

Laravelでは認証にTokenがよく使われます。トークンは本質的に暗号化された文字列であり、通常はサーバーによってクライアントに割り当てられ、身元を確認するためにクライアントからのすべてのリクエストとともに運ばれます。そこで質問は、Laravel のトークンをデータベースに保存する必要があるかということです。

答えは必ずしもそうとは限りません。一部の単純なアプリケーションでは、認証のために Cookie またはセッションの形式でトークンをクライアントに直接保存できます。ただし、クロスデバイス ログインやマルチデバイス同期など、より複雑なサービスを実装する必要がある場合は、効率的に管理するためにトークンをデータベースに保存する必要があります。

Laravelのトークン保存方法にはさまざまな実装方法があります。以下に 2 つの一般的な方法を紹介します。

  1. トークンをユーザー テーブルに保存する

これは最も簡単な方法です。ユーザーが登録またはログインすると、サーバーはトークンを生成し、それをユーザー テーブルに保存します。ユーザーがログインするたびに、認証のためにデータベースからユーザーのトークンを取得できます。

$user = User::where('email', $email)->first();

if ($user && Hash::check($password, $user->password)) {
    // 验证成功,将 Token 存储到数据库中
    $user->api_token = Str::random(60);
    $user->save();

    return response()->json([
        'status' => 'success',
        'message' => 'Authentication successfully!',
        'token' => $user->api_token,
    ]);
}

この方法の利点は、実装が簡単で理解しやすいことです。ただし、トークンの数が増えると、ユーザー データのクエリの効率が低下します。そのため、ユーザー数が多い場合には不向きです。

  1. トークンを別のトークン テーブルに保存する

この方法では、トークンを別のテーブルに保存し、各トークンはユーザー ID に関連付けられます。ユーザーがログインすると、サーバーはユーザーのトークンを生成し、そのトークンをトークン テーブルに保存します。

$token = [
    'access_token' => hash('sha256', Str::random(60)),
    'token_type' => 'Bearer',
    'expires_in' => 3600,
    'refresh_token' => hash('sha256', Str::random(60)),
    'user_id' => $user->id,
];

DB::table('tokens')->insert($token);

return response()->json([
    'status' => 'success',
    'message' => 'Authentication successfully!',
    'token' => $token['access_token'],
]);

認証を必要とするインターフェイスでは、クライアントから送信されたトークンからユーザーの ID を取得し、トークン テーブルにクエリを実行して、ユーザー ID に関連付けられたトークンがあるかどうかを確認できます。

$token = DB::table('tokens')
    ->where('access_token', $access_token)
    ->where('user_id', $user_id)
    ->first();

if ($token) {
    // Token 验证通过
}

この方法は比較的柔軟で、拡張が容易で、クエリ効率が高くなります。

要約すると、Laravel のトークン保存方法はビジネス ニーズに応じて異なり、特定の状況に応じてさまざまな実装方法を選択できます。データベースに保存されている場合は、リソースの不必要な浪費を避けるために、期限切れのトークンを適時にクリーンアップする必要があることに注意してください。

以上がLaravelトークンリポジトリ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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