???? ??? ?? ? ?????? ???? ?? ????? ?? ??? ?? ????? ????. ??? ???? ??? ??? ???? ???? ? ???? ??? ? ?????? ??? ??? ?????.
JSON ? ??(JWT)? ? ?????? ?? ??? ???? ???? ?? ??? ??? ??? ?? ?????. JWT ?? ??? ?? ??? ? ?? ??? ??????? ?????.
ThinkPHP? ?? ? ??????? ???? ?? ??? ??? ???? ?? ?? PHP ????????. ? ????? ThinkPHP6?? ??? ?? JWT? ???? ??????? ??? ???? ??? ????.
?? ?? ? ???
???? ?? ?? ??? ???? ?????? ???? ???. ??? ? ???? ??? ?? ? ??????. ??? ??? ?? ???? ??????.
- PHP 7.2 ??
- ThinkPHP 6.0.0 ??
- Firebase JWT PHP ?????
1??: Firebase JWT PHP ????? ??
Firebase JWT PHP ????? ??? ? ?? ??? JWT ?? ??? ???? ????. ? ?????? JWT? ??, ?? ? ???? ? ??? ???.
Composer? ???? Firebase JWT PHP ?????? ??? ? ????. ???? ?? ??? ?????.
composer require firebase/php-jwt
2??: ?? ??? ???
JWT? ?? ? ??? ???? ?? ?? JWT ??? ??? ??? ???? Token??? ???? ????. ? ????? ?? ??, ?? ??, ?? ?? ??? ???? ??? ?????.
app/common ????? Token.php ??? ???? ?? ??? ?????:
<?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; } }
????? FirebaseJWTJWT
?????? encode()
? ?????. ? decode()
???? ???? JWT? ???? ?? ?????. $key
? JWT? ???? ? ???? ??? $alg
? ??? ???? ???????. createToken()
?????? JWT ????? 4? ?(iss, iat, exp ? sub)? ???? ??? ?? ???
? ?????. $expiration
????? JWT? ?? ??? ?????. ??? JWT? ???? ??? ??? ? ????. FirebaseJWTJWT
庫中的encode()
和decode()
方法來創(chuàng)建和解析 JWT。$key
是我們用于簽名 JWT 的密鑰,$alg
是我們選擇的算法。 在createToken()
方法中,我們使用 JWT 負載中的四個鍵(iss,iat,exp和sub)并添加自定義data
。$expiration
參數(shù)指定 JWT 的過期時間。因此,JWT 只能在有效期內(nèi)使用。
步驟3:在中間件中驗證令牌
現(xiàn)在我們已經(jīng)創(chuàng)建了 Token 類以處理 JWT 相關(guā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()
方法來驗證 JWT。 此方法將返回 true 或 false,表示令牌是否有效。 如果有效,我們將使用getDataByToken()
方法來獲取 JWT 的數(shù)據(jù)部分并將其存儲在$request->data
中。 這樣,控制器就可以使用此數(shù)據(jù)。
步驟4:設(shè)置路由
現(xiàn)在,我們已經(jīng)創(chuàng)建了中間件,我們需要將其應(yīng)用到適當?shù)穆酚缮稀?/p>
假設(shè)我們要保護/api/user
的路由,我們需要在routepi.php
文件中按如下方式設(shè)置路由:
use appmiddlewareJwt; Route::group('api', function() { Route::get('user', 'UserController@getUserInfo')->middleware(Jwt::class); });
請注意,在此路由中,我們將Jwt
中間件作為參數(shù)傳遞給middleware()
方法。這是UserController
中的getUserInfo()
方法的示例代碼。
<?php namespace appcontroller; use appcommonToken; class UserController { public function getUserInfo() { $data = request()->data; ... } ... }
在控制器中,您可以通過調(diào)用$request->data
rrreee
? ??????? Token ????verifyToken()
???? ???? JWT? ?????. ? ???? ??? ???? ??? ???? true ?? false? ?????. ??? ?? getDataByToken()
???? ???? JWT? ??? ??? ??? $request->data
? ?????. ?? ?? ? ???? ?????? ??? ? ????. 4??: ?? ??????????? ?????? ?? ?? ??? ??? ???? ???. ????/api/user
??? ???? ??? route pi.php
???? ??? ?? ??? ???? ???. ??rrreee??????? ? ????? Jwt
????? ????? middleware()
???? ?????. ?? UserController
? getUserInfo()
???? ?? ?? ?????. ??rrreee????????? $request->data
? ???? ??? JWT? ??? ???? ???? ? ????. ??????????JWT ?? ??? ???? ? ??????? ?? ???? ????? ?? ? ????. ? ????? Firebase JWT PHP ?????? ???? ThinkPHP6?? JWT? ???? ???? ??? ??????. ????JWT ?? ??? ???? ? ???? Token??? ???? ??? JWT ?? ? ??? ??? ?? ????? ??????. ????? ? ????? ???? JWT? ??? ???? ????? ??? ? ???? ??? ?????. ????JWT ??? ???? ?? ??? ??????? ???? ??? ???? ??? ? ??? ?? ????. ? ??? JWT ??? ???? ??????? ???? ??? ???? ? ??? ???? ????. ??? ??? ThinkPHP6?? JWT ?? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

settings.json ??? ??? ?? ?? ?? ?? ?? ??? ??? VSCODE ??? ??? ???? ? ?????. 1. ??? ?? ?? : Windows? C : \ Users \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS IS /users//library/applicationsupport/code/user/settings.json, linux? /home//.config/code/user/settings.json; 2. Workspace ?? ?? : .vscode/settings project root ????

DateTime.strpTime ()? ???? ?? ???? DateTime ??? ??????. 1. ?? ?? : "%y-%m-%d"? ?? DateTime ???? "2023-10-05"; 2. ?? ??? "%m/%d/%y", "%d/%m/%y", ?? ??? ?? ???? ?? "%b%d,%y%i :%m%p"? ?? ?? ??? ?????. 3. dateUtil.parser.parse ()? ???? ? ??? ??? ???? ?????. 4. ?? .D

?, ?? CSS ?? ?? ??? JavaScript??? ??? HTML ? CSS? ?? ??? ? ????. 1. ?? UL? Li? ???? ?? ??? ??????. 2. ?? ?? ???? ???? ?????? ???? ??? ???? ???; 3. ?? ?? : ?? Li? ???, ?? ??? ??? ???? ?????. ??; 4. ?? ??? ???? ??? : ??, ????????? : ???? ??; 5. ?? ?? ???? ??? ?? ????, ??? ????, ??? ? ?????? ???? ??? ????? ??? ???? ??? ? ????. ?? ???? ???? JavaScript ??? ???? ???? ??? ?????.

@Property Decorator? ??? ??, ?? ? ?? ??? ???? ?? ???? ???? ???? ? ?????. 1. ?? ?? : @property? ?? ?? ?? ??? ????, ?? ?? ??? ???? ???? ?? ????? ??; 2. ?? ?? : @name.setter ? @name.deleter? ???? ?? ?? ?? ? ?? ??? ?????. 3. ?? ?? ???? : BankAccount? ?? ???? ??? ??? ???? ??? ??? ??? ??????. 4. ?? ?? ?? : ?? ??? ????? ?? ??? ??? ??? ???? ?? ??? ??? ?? ?? ? ?? ??? ?????.

itertools.combinations? ?? ??? ???? ??? ?? ??? ???? ?? ? ?? ?? (?? ???)? ???? ? ?????. ???? ??? ????. 1. ?? ??? ??? ?? ( 'a', 'b'), ( 'a', 'c') ? ???? 2 ?? ?? ??? ?????. 2. ?? ??? ??? "ABC"? "ABD"? ?? ???? 3 ? ??? ???; 3. ? ??? ?? 1 5 = 6? ?? ?? ?? ??? ??? ?????. ?? ?? ??? ???????. ??? ??? ??? ??? ???? ??????, ??? AB? BA? ???? ???? ??, ??? ?? ??? ????.

Python? ETL ????? ???? ???? ?????. 1. ??? ?? : ??????, API, ?? ? ?? ???? Pandas, Sqlalchemy, ?? ? ?? ?????? ?? ???? ?? ? ? ????. 2. ??? ?? : ??, ?? ??, ???, ?? ? ?? ??? ??? ???? ??? ??? ???? ??? ??????. 3. ??? ?? : Pandas 'To_SQL ??? ?? ???? ??? SDK? ???? ?? ???? ???? ???? ?? ?? ? ?? ?????? ?????. 4. ?? ?? ?? : ?? ??, Dagster, Prefect? ???? ???? ? ??? ???? ?? ?? ? ?? ??? ???? ???? ?? ??? ??????.

???? ?? ?? ?? ?? ???? ?? ???? ???? ? ???? ?????. 1. @pytest.fixture ?????? ???? ???? ??????. 2. ??? ???? ???? ??? ???? ??; 3. ?? ?? ??? ?? ? ?? ??; 4. ??, ?? ?? ?? ?? ?? ??? ?? ?? ??; 5. ?? ???? Conftest.py? ???? ??? ?? ??? ???? ???? ?? ?? ? ??? ?? ??????.

UUID ??? ???? ?? ?????? ???? ??? ??? ??? ? ?? ???? ??? MAC ??? ?? UUID.getNode ()? ?? ?? ???? ??????. 2. ?? ????? ???? IPConfig ?? ifconfig? ?? ??? ??? ???? ?? ???? ?? MAC ??? ??? ? ??? ???? ?? ???? ?? ??? ????? ????? ?????. 3. ?? ????? GetMac? ???? ?? ? get_mac_address ()? ???? Mac? ???? ????? ?? IP? ??? ????? ?? ???? ?????. ???? ?? ?????? ???? ??? UUID ??? ?????. ?? ???? ?? ??? ???? ????? ?? ?? ???? ???? ???? ??? getma? ??? ? ????.
