您现在的位置是:首页 > 技术教程 正文

学习php中使用composer下载安装firebase/php-jwt 以及调用方法

admin 阅读: 2024-03-16
后台-插件-广告管理-内容页头部广告(手机)

学习php中使用composer下载安装firebase/php-jwt 以及调用方法

    • 1、安装firebase/php-jwt
    • 2、封装jwt类

1、安装firebase/php-jwt

composer require firebase/php-jwt
  • 1

安装好以后出现以下文件:

在这里插入图片描述

2、封装jwt类

根据所使用的php框架,在指定目录创建 Token.php

<?php use Firebase\JWT\JWT; use Firebase\JWT\Key; class Token { const SECRET = 'hello';//密钥 //创建token static public function create_token($uid = 1) { $payload = [ 'iss' => 'pyg', //签发人(官方字段:非必需) 'exp' => time() + 3600, //过期时间(官方字段:非必需) 'aud' => 'admin', //接收人(官方字段:非必需) 'nbf' => time(), //生效时间(官方字段:非必需) 'iat' => time(), //签发时间(官方字段:非必需) 'admin_id' => $uid, //自定义字段(用户id) ]; $token = JWT::encode($payload, self::SECRET, 'HS256'); return $token; } //验证token static public function verify_token($token) { try { // $decoded = JWT::decode($jwt, new Key($key, 'HS256')); $Result = JWT::decode($token, new Key(self::SECRET, 'HS256')); return true; } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确 echo $e->getMessage(); }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用 echo $e->getMessage(); }catch(\Firebase\JWT\ExpiredException $e) { // token过期 echo $e->getMessage(); }catch(Exception $e) { //其他错误 echo $e->getMessage(); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

封装好以后 下面是登录控制器

public function loginCheck() { $req = request()->param(); // halt($req); // 接收工号和密码 $uname = trim(input('uname')); $password = trim(input('password')); // halt($password); // 工号和密码不能为空 if (empty($uname) || empty($password)) { // return '账号或密码不能为空!'; return json_encode(['error' => '账号或密码不能为空!']); } // halt($uname); // 进行账号验证 $data = Up::get(['uname'=>$uname]); // halt($data); if (!$data) { return json_encode(['error' => '工号不存在,请验证后输入!']); } // halt($password); // 进行密码验证 if ($password != $data['password']) { // return ''; return json_encode(['error' => '工号和密码不匹配!!']); } // 如果工号和密码匹配,则登录成功     这才是重要的 上面代码是验证输入是否有误 并不重要 生成token $token = Token::create_token($data['admin_id']); // dump($token); // return $token; return json_encode(['token' => $token]); // session('Uname',$uname); // $this->success('登录成功!','index/index'); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

最后进入其他页面验证token是否正确 我放到了Base控制器 每个页面都验证

<?php namespace app\index\controller; use think\Controller; use Token; class Base extends Controller { public function _initialize() { $this->verifyToken(); } public function verifyToken(){ // $token = input('token'); $token ='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJweWciLCJleHAiOjE2NzUxNDk3NzgsImF1ZCI6ImFkbWluIiwibmJmIjoxNjc1MTQ2MTc4LCJpYXQiOjE2NzUxNDYxNzgsImFkbWluX2lkIjoxfQ.bGz-MZwPDkixQQGnQ9iFpX-mZiOohJehuf114rc9zQA'; $res = Token::verify_token($token); halt($res);//这里可以来判断 是否跳到登录页面 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

token我直接写上去了 ,只为演示用,项目里是从客户端获取的来比对

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索