zoukankan      html  css  js  c++  java
  • thinkphp6使用jwt

    public function jwt()
        {
            $key='!@#$%*&';         //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
            $nowtime = time();
            echo ($nowtime+100).'<hr />';
            /*
            iss: jwt签发者
            sub: jwt所面向的用户
            aud: 接收jwt的一方
            exp: jwt的过期时间,这个过期时间必须要大于签发时间
            nbf: 定义在什么时间之前,该jwt都是不可用的.
            iat: jwt的签发时间
            jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
            */
            $token=array(
                "iss"=>$key,        //签发者 可以为空
                "aud"=>'',          //面象的用户 可以为空
                "iat"=>$nowtime,      //签发时间
                "nbf"=>$nowtime+3,    //在什么时候jwt开始生效
                "jti"=>md5(uniqid('JWT').time()),    //该Token唯一标识
                "exp"=> $nowtime+100, //token过期时间
                "data"=>[           //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
                    'uid'=>3301,
                ]
            );
            $jwt = JWT::encode($token, $key, "HS256");  //根据参数生成了 token
            echo $jwt;
        }
    
        //验证token
        function checkToken(){
            $token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIhQCMkJSomIiwiYXVkIjoiIiwiaWF0IjoxNjI2NzA2NzgxLCJuYmYiOjE2MjY3MDY3ODQsImp0aSI6ImE0YmE2YTE5NzlkNjcyMDFlOGM1YjQxOWExNjI2ZmUxIiwiZXhwIjoxNjI2NzA2ODgxLCJkYXRhIjp7InVpZCI6MzMwMX19.LZI8WfvNA_tqkE9Nop35Doa-wWw4R_ZQlsiZn50Un7w';
            $key='!@#$%*&'; 
            $status=array("code"=>2);
            try {
                JWT::$leeway = 60;//当前时间减去60,把时间留点余地,避免多服务器时间有误差,设置leeway后,token的有效时间就是exp+leeway
                $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
                $arr = (array)$decoded;
                $res['code']=1;
                $res['data']=$arr['data'];
                print_r($res);
            } catch(FirebaseJWTSignatureInvalidException $e) { //签名不正确
                $status['msg']="签名不正确";
                print_r($status);
            }catch(FirebaseJWTBeforeValidException $e) { // 签名在某个时间点之后才能用
                $status['msg']="token失效";
                print_r($status);
            }catch(FirebaseJWTExpiredException $e) { // token过期
                $status['msg']="token失效";
                print_r($status);
            }catch(Exception $e) { //其他错误
                $status['msg']="未知错误";
                print_r($status);
            }
        }
  • 相关阅读:
    html5 -- data-* 自定义属性
    javascript -- canvas绘制曲线
    php -- 取整数
    vim 常用命令
    Html Meta 标签详解
    基于行块分布函数的正文抽取
    机器学习公开课~~~~mooc
    快速排序
    mapreduce (三) MapReduce实现倒排索引(二)
    temp gbk2utf8
  • 原文地址:https://www.cnblogs.com/codeit/p/15033334.html
Copyright © 2011-2022 走看看