自学的菜鸟 2021-12-01 13:06 采纳率: 61.6%
浏览 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日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵