Heim  >  Artikel  >  PHP-Framework  >  Laravel-Token-Repository?

Laravel-Token-Repository?

PHPz
PHPzOriginal
2023-03-31 16:19:59683Durchsuche

Ist Laravel Token auf Lager?

In Laravel wird Token häufig zur Authentifizierung verwendet. Ein Token ist im Wesentlichen eine verschlüsselte Zeichenfolge, die normalerweise vom Server dem Client zugewiesen und bei jeder Anfrage des Clients zur Überprüfung seiner Identität mitgeführt wird. Die Frage ist also: Muss Laravel's Token in der Datenbank gespeichert werden?

Die Antwort ist nicht unbedingt. In einigen einfachen Anwendungen können wir das Token zur Authentifizierung direkt in Form eines Cookies oder einer Sitzung auf dem Client speichern. Wenn wir jedoch einige komplexere Dienste implementieren müssen, wie z. B. geräteübergreifende Anmeldung, Synchronisierung mehrerer Geräte usw., müssen wir das Token für eine effektive Verwaltung in der Datenbank speichern.

Es gibt viele verschiedene Implementierungsmethoden für die Token-Speichermethode von Laravel. Im Folgenden werden zwei gängige Methoden vorgestellt:

  1. Token in der Benutzertabelle speichern

Dies ist die einfachste Methode. Wenn sich ein Benutzer registriert oder anmeldet, generiert der Server ein Token und speichert es in der Benutzertabelle. Jedes Mal, wenn sich ein Benutzer anmeldet, können wir das Token des Benutzers zur Authentifizierung aus der Datenbank abrufen.

$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,
    ]);
}

Der Vorteil dieser Methode ist, dass sie einfach umzusetzen und leicht zu verstehen ist. Wenn jedoch immer mehr Token vorhanden sind, nimmt die Effizienz der Abfrage von Benutzerdaten ab. Daher ist es nicht geeignet, wenn die Anzahl der Benutzer groß ist.

  1. Tokens in einer separaten Token-Tabelle speichern

Diese Methode speichert Tokens in einer separaten Tabelle, und jedes Token ist einer Benutzer-ID zugeordnet. Wenn sich ein Benutzer anmeldet, generiert der Server ein Token für den Benutzer und speichert das Token dann in der Token-Tabelle.

$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'],
]);

In der Schnittstelle, die eine Authentifizierung erfordert, können wir die Benutzer-ID aus dem vom Client gesendeten Token abrufen und dann die Token-Tabelle abfragen, um festzustellen, ob der Benutzer-ID ein Token zugeordnet ist.

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

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

Diese Methode ist relativ flexibel, leicht zu erweitern und weist eine hohe Abfrageeffizienz auf.

Zusammenfassend lässt sich sagen, dass die Token-Speichermethoden von Laravel je nach Geschäftsanforderungen variieren und Sie je nach spezifischen Umständen unterschiedliche Implementierungsmethoden auswählen können. Es ist zu beachten, dass abgelaufene Token, wenn sie in der Datenbank gespeichert werden, rechtzeitig bereinigt werden müssen, um unnötige Ressourcenverschwendung zu vermeiden.

Das obige ist der detaillierte Inhalt vonLaravel-Token-Repository?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn