Parce que le prochain projet utilisera TP5 pour développer un petit programme, j'ai donc utilisé le framework TP. Parce que le développement de petits programmes nécessite l'arrière-plan pour écrire l'interface API, j'ai vérifié en ligne s'il existe des dépendances associées. Je le recommande ici. Outil d'extension think-api, car je souhaite principalement utiliser la fonction jwt pour déterminer l'état de connexion de l'utilisateur du mini-programme. Prenons mon projet comme exemple et parlons brièvement du déploiement de JWT via think-api. .
1. Installer les dépendances
La version TP que j'utilise est TP5.1, l'adresse de téléchargement de l'extension est : https://github.com/czewail/think- api, Installez les dépendances via composer :
$ composer require zewail/think-api:1.1.x
2. Instructions de configuration
Une fois l'extension installée, nous pouvons la voir dans le fichier supplier/think-api/config/. fichier jwt.php configuration jwt.
Principalement le chemin du modèle utilisateur, qui doit être modifié :
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. Créer le contrôleur d'interface API
Créer ce que nous voulons via le. ligne de commande Pour renvoyer le jeton au contrôleur frontal
$ php thnk make:controller api/Index
4. Dépendance de référence
Ajoutez le chemin du fichier dans l'en-tête du fichier créé : utilisez ZewailApiFacadesJWT Le cas ; le code est le suivant :
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); }
Une chose à noter est que les paramètres par défaut reçus par l'API sont le mobile et le mot de passe. Dans l'exemple du porte-à-porte, il s'agit du numéro de téléphone et du mot de passe. Le nom de la variable a été modifié, nous devons donc insérer du code dans le modèle utilisateur pour illustrer. Et ainsi de suite.
public $jwtSub = 'tel';
5. Configurer le routage
在 route/route.php 中加入路由地址 Route::get('api/test', 'api/Index/index');
6. Exécuter le test
Les résultats du test dans Postman sont les suivants, donc nous pouvons Le jeton peut être généré en arrière-plan et renvoyé à la réception pour vérification et connexion.
7. Jeton de vérification (supplémentaire)
Nous renvoyons le jeton généré précédemment dans postman avec l'en-tête inclus Aller au backend pour effectuer la vérification du jeton, comme indiqué dans la figure ci-dessous.
porte ensuite l'en-tête pour accéder à la route de vérification. Le code de vérification est le suivant :
if ($user = JWT::authenticate()) { return true; }
Si la vérification est correcte, true sera renvoyé.
8. Concernant le problème de non-existence et d'expiration des jetons (supplémentaire)
L'interface think-api dans le fichier supplierthink-apisrcJWT/Factoriescode.php fournit nous avec un retour d'erreur correspondant.
// 检查是否过期 if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) { throw new TokenExpiredException('该 Token 已过期'); } // 验证签名 if (!$this->verify("$header64.$payload64", $signature)) { throw new TokenInvalidException('无效的 Token'); }
Alors, comment utilisons-nous ces retours d'état ? Cela nécessite l'utilisation d'un middleware frontal pour vérifier les informations de jeton envoyées par le front-end.
Créez d'abord le middleware :
$ php think make:middle Test
Puis écrivez le contenu suivant dans le 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为空 ]); } }
Puis référencez-le dans la route.
Tutoriel recommandé : tutoriel thinkphp
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!