自学的菜鸟 2021-12-01 13:06 采纳率: 62.5%
浏览 78
已结题

PHP怎么使用jwt生成 token并且验证

我现在需要写一个用户登录的端口,前端发送登录信息用户名:xiaoming,密码:123456到端口www.abc.com/php/login.php,这个PHP要验证用户名和密码,然后生成一个token和用户信息返回给前端,然后前端再次请求的时候会带上这个token,php要怎么验证解析这个token并返回相应的用户信息,这个php文件要怎么写呢?

<?php
require_once '../vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

?>


  • 写回答

2条回答 默认 最新

  • 呼叫007 2021-12-01 14:45
    关注

    第一 账号密码登录 获取token
    JWT需要composer安装下,然后调用

    $jwt_config = [
        'iss' => config('jwt.iss'), //签发者 可选
        'aud' => config('jwt.iss'), //接收该JWT的一方,可选
        'iat' => time(), //签发时间
        'nbf' => time() , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
        'exp' => time()+7200, //过期时间,这里设置2个小时
        'data' => [ //自定义信息,不要定义敏感信息
            'user_id' => $user_data['id']
        ]
    ];
    $token=JWT::encode($jwt_config,config('jwt.key'),'HS256');
    

    第二 解密token

    //检测token
    public function check_token($token){
      try {
        JWT::$leeway = 60;//当前时间减去60,把时间留点余地
        $decoded = JWT::decode($token, config('jwt.key'), ['HS256']); //HS256方式,这里要和签发的时候对应
        $arr = (array)$decoded;
        $result=['code'=>200,'msg'=>'OK','user_id'=>$arr['data']->user_id];
      } catch(SignatureInvalidException $e) {  //签名不正确
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(BeforeValidException $e) {  // 签名在某个时间点之后才能用
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(ExpiredException $e) {  // token过期
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(\Exception $e) {  //其他错误
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }
      return $result;
    }
    这样就能得到用户id
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 修改了问题 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。