Verwendung der JWT-Validierung in ThinkPHP6
Jun 20, 2023 pm 11:36 PMMit der Entwicklung des Internets ist die Zahl der Nutzer von Webanwendungen sukzessive gestiegen und Sicherheitsaspekte sind immer wichtiger geworden. Die Authentifizierung ist ein wichtiger Bestandteil der Sicherheit von Webanwendungen, da nur authentifizierte Benutzer auf Ressourcen zugreifen k?nnen, für die Berechtigungen erforderlich sind.
JSON Web Token (JWT) ist ein leichtes, eigenst?ndiges Authentifizierungstoken, das eine hervorragende M?glichkeit zur sicheren übertragung von Informationen zwischen Webanwendungen bietet. Das JWT-Authentifizierungsschema eignet sich für verteilte Systeme und Single-Page-Anwendungen.
ThinkPHP ist ein beliebtes PHP-Framework, das viele Tools zum Entwickeln sicherer Webanwendungen bereitstellt. In diesem Artikel erfahren Sie, wie Sie JWT zur Authentifizierung in ThinkPHP6 verwenden, um die Sicherheit Ihrer Anwendung zu erh?hen.
Entwicklungsumgebung und Abh?ngigkeiten
Bevor wir beginnen, müssen wir sicherstellen, dass die Entwicklungsumgebung korrekt eingerichtet wurde. Im Folgenden sind die in diesem Artikel verwendeten Umgebungen und Abh?ngigkeiten aufgeführt. Bitte ?ndern Sie es entsprechend Ihren Bedürfnissen.
- PHP 7.2 oder h?her
- ThinkPHP 6.0.0 oder h?her
- Firebase JWT PHP-Bibliothek
Schritt 1: Firebase JWT PHP-Bibliothek installieren
Die Installation der Firebase JWT PHP-Bibliothek besteht darin, im ersten Schritt das JWT-Authentifizierungsschema zu verwenden. Diese Bibliothek hilft uns beim Erstellen, Signieren und überprüfen von JWTs.
Wir k?nnen Composer verwenden, um die Firebase JWT PHP-Bibliothek zu installieren. Geben Sie den folgenden Befehl in die Befehlszeile ein:
composer require firebase/php-jwt
Schritt 2: Token-Klasse erstellen
Um die Verwaltung und Verwendung von JWT zu erleichtern, erstellen wir eine Klasse mit dem Namen Token, um verschiedene Aspekte der JWT-überprüfung abzuwickeln. Diese Klasse umfasst Funktionen wie das Erstellen von Token, das überprüfen von Token und das Abrufen von Token-Informationen.
Erstellen Sie die Datei Token.php im Verzeichnis app/common und fügen Sie den folgenden Code hinzu:
<?php namespace appcommon; use FirebaseJWTJWT; class Token { private static $key = 'your_secret_key'; private static $alg = 'HS256'; public static function createToken($data, $expiration = 3600) { $payload = [ 'iss' => 'localhost', 'sub' => 'token', 'iat' => time(), 'exp' => time() + $expiration, 'data' => $data ]; return JWT::encode($payload, self::$key, self::$alg); } public static function decodeToken($token) { return JWT::decode($token, self::$key, [self::$alg]); } public static function getDataByToken($token) { $decoded = self::decodeToken($token); if (isset($decoded->data)) { return $decoded->data; } else { return false; } } public static function verifyToken($token) { $result = false; try { $decoded = self::decodeToken($token); $result = true; } catch (Exception $e) { // Invalid token } return $result; } }
Im Code verwenden wir encode()
in der Bibliothek FirebaseJWTJWT
und die Methode decode()
zum Erstellen und Parsen von JWT. $key
ist der Schlüssel, den wir zum Signieren des JWT verwenden, und $alg
ist der Algorithmus, den wir ausw?hlen. In der Methode createToken()
verwenden wir die vier Schlüssel (iss, iat, exp und sub) aus der JWT-Nutzlast und fügen benutzerdefinierte Daten
hinzu. Der Parameter $expiration
gibt die Ablaufzeit des JWT an. Daher kann JWT nur innerhalb des Gültigkeitszeitraums verwendet werden. FirebaseJWTJWT
庫中的encode()
和decode()
方法來創(chuàng)建和解析 JWT。$key
是我們用于簽名 JWT 的密鑰,$alg
是我們選擇的算法。 在createToken()
方法中,我們使用 JWT 負(fù)載中的四個(gè)鍵(iss,iat,exp和sub)并添加自定義data
。$expiration
參數(shù)指定 JWT 的過期時(shí)間。因此,JWT 只能在有效期內(nèi)使用。
步驟3:在中間件中驗(yàn)證令牌
現(xiàn)在我們已經(jīng)創(chuàng)建了 Token 類以處理 JWT 相關(guān)的工作,我們需要在中間件中驗(yàn)證用戶 JWT。使用中間件可以方便地在應(yīng)用程序的控制器代碼中攔截和設(shè)置響應(yīng),并且可以將代碼分離到不同的類中以便更好地管理和修改。
在 app/middleware 目錄下創(chuàng)建Jwt.php文件,并添加以下代碼:
<?php namespace appmiddleware; use appcommonToken; use thinkexceptionHttpResponseException; use thinkResponse; class Jwt { public function handle($request, Closure $next) { if (!$request->header('Authorization')) { return json(['code' => 401, 'msg' => 'Unauthorized']); } $header = $request->header('Authorization'); $token = substr($header, 7); if (Token::verifyToken($token)) { $request->data = Token::getDataByToken($token); return $next($request); } else { return json(['code' => 401, 'msg' => 'Unauthorized']); } } }
在此中間件中,我們使用 Token 類中的verifyToken()
方法來驗(yàn)證 JWT。 此方法將返回 true 或 false,表示令牌是否有效。 如果有效,我們將使用getDataByToken()
方法來獲取 JWT 的數(shù)據(jù)部分并將其存儲(chǔ)在$request->data
中。 這樣,控制器就可以使用此數(shù)據(jù)。
步驟4:設(shè)置路由
現(xiàn)在,我們已經(jīng)創(chuàng)建了中間件,我們需要將其應(yīng)用到適當(dāng)?shù)穆酚缮稀?/p>
假設(shè)我們要保護(hù)/api/user
的路由,我們需要在routepi.php
文件中按如下方式設(shè)置路由:
use appmiddlewareJwt; Route::group('api', function() { Route::get('user', 'UserController@getUserInfo')->middleware(Jwt::class); });
請(qǐng)注意,在此路由中,我們將Jwt
中間件作為參數(shù)傳遞給middleware()
方法。這是UserController
中的getUserInfo()
方法的示例代碼。
<?php namespace appcontroller; use appcommonToken; class UserController { public function getUserInfo() { $data = request()->data; ... } ... }
在控制器中,您可以通過調(diào)用$request->data
rrreee
In dieser Middleware verwenden wir die MethodeverifyToken()
in der Token-Klasse, um das JWT zu überprüfen. Diese Methode gibt ?true“ oder ?false“ zurück und gibt an, ob das Token gültig ist. Wenn gültig, verwenden wir die Methode getDataByToken()
, um den Datenteil des JWT abzurufen und ihn in $request->data
zu speichern. Diese Daten stehen dann dem Verantwortlichen zur Verfügung. Schritt 4: Routen einrichten????Da wir nun die Middleware erstellt haben, müssen wir sie auf die entsprechenden Routen anwenden. ????Angenommen, wir m?chten die Route von /api/user
schützen, müssen wir die Route in der Datei route pi.php
wie folgt festlegen: ??rrreee??Bitte beachten In dieser Route übergeben wir die Jwt
-Middleware als Parameter an die middleware()
-Methode. Dies ist der Beispielcode für die Methode getUserInfo()
in UserController
. ??rrreee??Im Controller k?nnen Sie auf die im authentifizierten JWT gespeicherten Daten zugreifen, indem Sie $request->data
aufrufen. ????Fazit????Die JWT-Authentifizierungsmethode kann Ihre Webanwendung sicherer und zuverl?ssiger machen. In diesem Artikel haben wir beschrieben, wie Sie die Firebase JWT PHP-Bibliothek zum Erstellen und Validieren von JWTs in ThinkPHP6 verwenden. ????Wir haben eine Klasse namens Token erstellt, die für die Verarbeitung von JWT-bezogenen Arbeiten verwendet wird, und eine Middleware zum Validieren von JWT und Festlegen von Daten hinzugefügt. Schlie?lich richten wir den Routing- und Controller-Code ein, der diese Middleware verwendet, um auf die im JWT gespeicherten Daten zuzugreifen. ????Der Hauptzweck der Einführung der JWT-Authentifizierung besteht darin, sicherzustellen, dass Ressourcen in der Anwendung nur von authentifizierten Benutzern verwendet werden k?nnen. Ich hoffe, dieser Artikel hat Ihnen geholfen zu verstehen, wie Sie Ihre Anwendung mithilfe der JWT-Authentifizierung sichern k?nnen! ??Das obige ist der detaillierte Inhalt vonVerwendung der JWT-Validierung in ThinkPHP6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Datei "Settings.JSON" befindet sich auf dem Pfad auf Benutzerebene oder Arbeitsbereichsebene und wird verwendet, um die VSCODE-Einstellungen anzupassen. 1. Benutzer-Level-Pfad: Windows ist C: \ Benutzer \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS is /users//library/applicationsupport/code/user/settings.json, Linux is /home/.config/code/usser/setings.json; 2. Pfad auf Arbeitsbereichsebene: .VSCODE/Einstellungen im Projekt Root Directory

Verwenden Sie datetime.strptime (), um Datumszeichenfolgen in DateTime -Objekt umzuwandeln. 1. Grundnutzung: Analyse "2023-10-05" als DateTime-Objekt über "%y-%M-%d"; 2. unterstützt mehrere Formate wie "%M/%d/%y", um amerikanische Daten zu analysieren, "%d/%m/%y", um britische Daten zu analysieren ",%b%d,%y%i:%m%p", um die Zeit mit AM/PM zu analysieren; 3.. Verwenden Sie DateUtil.Parser.Parse (), um unbekannte Formate automatisch zu schlie?en; 4. Verwenden Sie .D

Ja, ein gemeinsames CSS-Dropdown-Menü kann mit reinem HTML und CSS ohne JavaScript implementiert werden. 1. Verwenden Sie verschachtelte UL und Li, um eine Menüstruktur zu erstellen. 2. Verwenden Sie die: Hover Pseudo-Klasse, um die Anzeige und das Verstecken von Pulldown-Inhalten zu steuern. 3.. Setzen Sie Position: Relativ für Eltern -Li, und das Untermenü wird unter Verwendung von Position positioniert: absolut; 4. Das untergeordnete Standards ist angezeigt: Keine, die angezeigt wird: Block, wenn sie schwebend sind; 5. Multi-Level-Pulldown kann durch Verschachtelung, kombiniert mit dem übergang und Fade-In-Animationen erzielt und an mobile Terminals mit Medienabfragen angepasst werden. Die gesamte L?sung ist einfach und erfordert keine JavaScript -Unterstützung, was für gro?e geeignet ist

@Property Decorator wird verwendet, um Methoden in Eigenschaften umzuwandeln, um die Les-, Einstellungs- und L?schsteuerung von Eigenschaften zu implementieren. 1. Grundnutzung: Definieren Sie nur schreibgeschützte Attribute über @Property, wie z. B. Bereich berechnet auf dem Radius und direkt zugegriffen; 2. Erweiterte Verwendung: Verwenden Sie @name.setter und @name.deleter, um die überprüfung der Attributzuweisung und L?schvorg?nge zu implementieren; 3. Praktische Anwendung: Führen Sie die Datenüberprüfung in Setzen durch, z. B. BankAccount, um sicherzustellen, dass der Restbetrag nicht negativ ist. 4. Benennungsspezifikation: Die internen Variablen sind vorangestellt, Eigenschaftennamen sind mit den Attributen überein, und eine einheitliche Zugriffskontrolle wird zur Verbesserung der Codesicherheit und -wartbarkeit verwendet.

Itertools.combinations wird verwendet, um alle nicht repetitiven Kombinationen (irrelevant) zu generieren, die eine bestimmte Anzahl von Elementen aus dem iterablen Objekt ausw?hlen. Die Verwendung umfasst: 1. Auswahl 2 Elementkombinationen aus der Liste, wie z. 2. Nehmen Sie 3 Charakterkombinationen von Saiten wie "ABC" und "ABD", die für die Subsequence -Erzeugung geeignet sind; 3. Finden Sie die Kombinationen, in denen die Summe von zwei Zahlen dem Zielwert entspricht, z. B. 1 5 = 6, die Doppelschleifenlogik vereinfachen. Der Unterschied zwischen Kombinationen und Anordnung besteht darin, ob die Reihenfolge wichtig ist, Kombinationen betrachten AB und BA als gleich, w?hrend Permutationen als unterschiedlich angesehen werden.

Python ist ein effizientes Instrument zur Implementierung von ETL -Prozessen. 1. Datenextraktion: Daten k?nnen aus Datenbanken, APIs, Dateien und anderen Quellen über Pandas, SQLalchemy, Anfragen und andere Bibliotheken extrahiert werden; 2. Datenumwandlung: Verwenden Sie Pandas für Reinigung, Typumwandlung, Assoziation, Aggregation und andere Vorg?nge, um die Datenqualit?t zu gew?hrleisten und die Leistung zu optimieren. A. Datenbelastung: Verwenden Sie Pandas 'TO_SQL -Methode oder Cloud -Plattform -SDK, um Daten an das Zielsystem zu schreiben, auf Schreibmethoden und Stapelverarbeitung zu achten. 4. Toolempfehlungen: Luftstrom, Dagster, Pr?fekten werden zur Prozessplanung und -verwaltung verwendet, um Protokollalarme und virtuelle Umgebungen zu kombinieren, um die Stabilit?t und Wartbarkeit zu verbessern.

Das Fixture ist eine Funktion, mit der voreingestellte Umgebungen oder Daten für Tests bereitgestellt werden. 1. Verwenden Sie den Dekorateur für @PyTest.Fixure, um die Fixture zu definieren. 2. Inject Fixture in Parameterform in der Testfunktion; 3. Führen Sie ein Setup vor Ausbeute aus und rei?en Sie dann ab. 4. Steuerungsumfang durch Umfangsparameter wie Funktion, Modul usw.; 5. Legen Sie das gemeinsame Ger?t in conftest.

Verwenden Sie das UUID-Modul, um die MAC-Adresse der ersten Netzwerkkarte der Maschine über die Plattform zu erhalten, ohne dass eine Bibliothek von Drittanbietern erforderlich ist, und konvertieren Sie es in ein Standardformat über uUid.getNode (). 2. Subprozess verwenden, um Systembefehle wie IPConfig oder IfConfig aufzurufen und diese mit regelm??iger Extraktion aller Netzwerkkarten -MAC -Adressen zu kombinieren. 3.. Verwenden Sie die Bibliothek von Drittanbietern GetMac, rufen Sie Get_MAC_ADdress () nach der Installation auf, um den Mac zu erhalten, der die Abfrage nach Schnittstelle oder IP unterstützt, jedoch zus?tzliche Abh?ngigkeiten erfordert. Zusammenfassend wird die UUID -Methode empfohlen, wenn keine externe Bibliothek ben?tigt wird. Wenn Sie flexibel Multi-Network-Karteninformationen erhalten müssen, k?nnen Sie die Subprozessl?sung verwenden, damit Sie die Abh?ngigkeit GetMA installieren k?nnen.
