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’) 進行比較
生成時間大於用戶最後登錄時間即驗證通過,否則驗證失敗。