Heim > Artikel > PHP-Framework > ThinkPHP5 – Stellen Sie JWT mithilfe der think-API bereit
Da das nächste Projekt TP5 zum Entwickeln eines kleinen Programms verwenden wird, habe ich das TP-Framework verwendet. Da die Entwicklung kleiner Programme den Hintergrund zum Schreiben der API-Schnittstelle erfordert, habe ich online überprüft, ob es entsprechende Abhängigkeiten gibt. Ich empfehle das Think-API-Erweiterungstool, da ich hauptsächlich die JWT-Funktion verwenden möchte, um den Anmeldestatus des Miniprogrammbenutzers zu ermitteln. Lassen Sie uns kurz über die Bereitstellung von JWT über Think-API sprechen .
1. Installationsabhängigkeiten
Die TP-Version, die ich verwende, ist TP5.1, die Download-Adresse der Erweiterung lautet: https://github.com/czewail/think- api, Abhängigkeiten über Composer installieren:
$ composer require zewail/think-api:1.1.x
2. Konfigurationsanweisungen
Nachdem die Erweiterung installiert wurde, können wir sie in der Datei „vendor/think-api/config/“ anzeigen. jwt.php-Datei, JWT-Konfiguration.
Hauptsächlich der Benutzermodellpfad, der geändert werden muss:
return [ // 加密算法 'algorithm' => 'HS256', // HMAC算法使用的加密字符串 'key' => 'ex-key', // RSA算法使用的私钥文件路径 'privateKeyPath' => '/home/rsa_private_key.pem', // RSA算法使用的公钥文件路径 'publicKeyPath' => '/home/rsa_public_key.pem', // 误差时间,单位秒 'deviation' => 60, // 过期时间, 单位分钟 'ttl' => 120, // 用户模型路径 'user' => app\api\model\User::class, ];
3. Erstellen Sie den API-Schnittstellencontroller
Erstellen Sie, was wir wollen Befehlszeile Um das Token an den Front-End-Controller zurückzugeben
$ php thnk make:controller api/Index
4. Referenzabhängigkeit
Fügen Sie den Dateipfad im erstellten Dateiheader hinzu: Verwenden Sie ZewailApiFacadesJWT Der Code lautet wie folgt:
public function index() { //获取前台发送过来的登录信息 $tel = $this->request->tel; $password = $this->request->passwword; //把登录信息传入JWT验证匹配 $credentials = ['tel' => $tel, 'password' => $password]; //1.验证通过返回token 1和2任意取一种方式 $token = JWT::attempt($credentials); //2.通过已有账户模型生成token 1和2任意取一种方式 $user = User::find(84); $token = JWT::fromUser($user); $msg = "验证成功"; //把token发送给前台确认是否成功登陆 return $this->ApiSuccess($token, $msg); }
Zu beachten ist, dass die von der API empfangenen Standardparameter Mobil und Passwort sind. Im Tür-zu-Tür-Beispiel sind dies Tel und Passwort. Der Variablenname wurde geändert, daher müssen wir zur Veranschaulichung Code in das Benutzermodell einfügen. Und so weiter.
public $jwtSub = 'tel';
5. Routing konfigurieren
在 route/route.php 中加入路由地址 Route::get('api/test', 'api/Index/index');
6. Test ausführen
Die Testergebnisse in Postman sind wie folgt Wir können das Token im Hintergrund generieren und zur Überprüfung und Anmeldung an die Rezeption zurücksenden.
7. Verifizierungstoken (ergänzend)
Wir senden das zuvor generierte Token erneut mit dem enthaltenen Header. Gehen Sie zum Backend um eine Token-Überprüfung durchzuführen, wie in der Abbildung unten gezeigt.
trägt dann den Header, um auf die Verifizierungsroute zuzugreifen. Der Verifizierungscode lautet wie folgt:
if ($user = JWT::authenticate()) { return true; }
Wenn die Verifizierung korrekt ist, wird true zurückgegeben.
8. Bezüglich des Problems der Nichtexistenz und des Token-Ablaufs (ergänzend)
Die think-api-Schnittstelle in der Datei sellerthink-apisrcJWT/Factoriescode.php bietet uns mit entsprechender Fehlerrückmeldung.
// 检查是否过期 if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) { throw new TokenExpiredException('该 Token 已过期'); } // 验证签名 if (!$this->verify("$header64.$payload64", $signature)) { throw new TokenInvalidException('无效的 Token'); }
Wie nutzen wir diese Statusrückmeldungen? Dazu ist die Verwendung von Front-End-Middleware erforderlich, um die vom Front-End gesendeten Token-Informationen zu überprüfen.
Erstellen Sie zuerst die Middleware:
$ php think make:middle Test
Schreiben Sie dann den folgenden Inhalt in die Middleware:
//用try catch捕获报错反馈 public function handle($request, Closure $next) { try { if (!$user = JWT::authenticate()) { return response()->json([ 'errcode' => 1004, 'errmsg' => '无此用户', ], 404); } return $next($request); } catch (TokenExpiredException $e) { return response()->json([ 'errcode' => 1003, 'errmsg' => 'token 过期', //token已过期 ]); } catch (TokenInvalidException $e) { return response()->json([ 'errcode' => 1002, 'errmsg' => 'token 无效', //token无效 ]); } catch (JWTException $e) { return response()->json([ 'errcode' => 1001, 'errmsg' => '缺少token', //token为空 ]); } }
Dann referenzieren Sie ihn in der Route.
Empfohlenes Tutorial: Thinkphp-Tutorial
Das obige ist der detaillierte Inhalt vonThinkPHP5 – Stellen Sie JWT mithilfe der think-API bereit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!