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’) 进行比较
生成时间大于用户最后登录时间即验证通过,否则验证失败。