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(\Firebase\JWT\SignatureInvalidException $e) { //簽名不正確
            $status['msg']="簽名不正確";
            print_r($status);
        }catch(\Firebase\JWT\BeforeValidException $e) { // 簽名在某個時間點之后才能用
            $status['msg']="token失效";
            print_r($status);
        }catch(\Firebase\JWT\ExpiredException $e) { // token過期
            $status['msg']="token失效";
            print_r($status);
        }catch(Exception $e) { //其他錯誤
            $status['msg']="未知錯誤";
            print_r($status);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM