PHP JWT API接口驗籤

Composer: https://github.com/lcobucci/jwt

<?php

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Parser;

class Jwt
{

    //生成token
    public function createToken()
    {
        $key = 'abcd';
        $signer = new Sha256();
        $token = (new Builder())
            ->setIssuedAt(time())//簽發時間 'iat'
            ->setNotBefore(time())//該時間之前不接收處理該token  'nbf'
            ->setExpiration(time() + 3600)//過期時間
            ->set('uid', 3)//自定義字段 可以通過該字段判斷用戶身份
            ->sign($signer, $key)//簽名
            ->getToken();

        echo $token;


    }

    //驗證token
    public function validateToken()
    {
        $key = 'abcd';
        $signer = new Sha256();
        $token = isset($_SERVER['HTTP_AUTHORIZATION']) ? $_SERVER['HTTP_AUTHORIZATION'] : '';
        try {
            $token = (new Parser())->parse((string)$token);

            //判斷token是否過期
            if ($token->isExpired()) {
                throw new Exception('已經過期');
            }

            //如果驗證成功
            if (true == ($token->verify($signer, $key))) {
                //獲取到id值
                $uid = $token->getClaim('uid');  //用戶id
            } else {
                throw new Exception('token錯誤');
            }

        } catch (\Exception $e) {
            echo $e->getMessage();
        }
    }
}
?>


取到用戶ID之後到用戶表中查詢該用戶的最後登錄時間,然後跟TOKEN的生成時間 $token->getClaim(‘iat’) 進行比較
生成時間大於用戶最後登錄時間即驗證通過,否則驗證失敗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章