|
<?php
declare(strict_types=1);
namespace app\utils;
use \Firebase\JWT\JWT;
/**
* PHP实现jwt
*/
class JWTUtils extends JWT
{
//使用HMAC生成信息摘要时所使用的密钥
private static $key = 'bf731bcb3f5e52ec1b8b12c95f503d7a';
/**
* 获取jwt token
* @param array $payload jwt载荷 格式如下非必须
* [
* 'iss'=>'jwt_admin', //该JWT的签发者
* 'iat'=>time(), //签发时间
* 'exp'=>time()+7200, //过期时间
* 'nbf'=>time()+60, //该时间之前不接收处理该Token
* 'sub'=>'www.admin.com', //面向的用户
* 'jti'=>md5(uniqid('JWT').time()) //该Token唯一标识
* ]
* @return bool|string
*/
public static function getToken(array $payload)
{
if (is_array($payload)) {
$token = self::encode($payload, self::$key);
return $token;
} else {
return false;
}
}
/**
* 验证token是否有效,默认验证exp,nbf,iat时间
* @param string $Token 需要验证的token
* @return bool|string
*/
public static function verifyToken(string $Token)
{
try {
self::$leeway = 60;
$decoded = self::decode($Token, self::$key, ['HS256']);
$arr = (array)$decoded;
if ($arr['exp'] < time()) {
throw new RRException("认证信息已过期, 请重新登录.", 401);
}
return true;
} catch(\Exception $e) {
throw new RRException($e->getMessage(), 401);
}
}
}
|