You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
99 lines
2.7 KiB
2 months ago
|
<?php
|
||
|
|
||
|
namespace app\utility;
|
||
|
use think\facade\Cache;
|
||
|
class Jwt
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* @desc 生成token
|
||
|
* @param $userId // 用户id
|
||
|
* @param $key // 前后台不一致的key
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getToken($userId, $key): string
|
||
|
{
|
||
|
$payload = [
|
||
|
'data' => [
|
||
|
'userId' =>$userId
|
||
|
],
|
||
|
'iss' => 'qwueiqnyuqjezchiw', // 随机
|
||
|
'aud' => '',
|
||
|
'iat' =>time()
|
||
|
];
|
||
|
|
||
|
return 'Bear' . \Firebase\JWT\JWT::encode($payload, $key, 'HS256');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 后端生成token
|
||
|
* @param $userId // 用户id
|
||
|
* @return string
|
||
|
*/
|
||
|
function generateToken($userId)
|
||
|
{
|
||
|
//获取当前时间戳
|
||
|
$currentTime = time();
|
||
|
$data = array(
|
||
|
"iss" => 'coinwerqwerasdf', //签发者 可以为空
|
||
|
"aud" => '', //面象的用户,可以为空
|
||
|
"iat" => $currentTime, //签发时间
|
||
|
"nbf" => $currentTime, //立马生效
|
||
|
"exp" => $currentTime + 3600*24, //token 过期时间 1天
|
||
|
"data" => [ //记录的userid的信息
|
||
|
'user_id' => $userId,
|
||
|
]
|
||
|
);
|
||
|
//生成token
|
||
|
$token = \Firebase\JWT\JWT::encode($data, env('ENCRYPT.ADMINSALT'), "HS256");
|
||
|
|
||
|
return 'Bear'.$token;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 检查token有效性
|
||
|
* @param $token
|
||
|
* @return array|int[]
|
||
|
*/
|
||
|
public function chekToken($token)
|
||
|
{
|
||
|
$status=array("code"=>2);
|
||
|
if(!$token){
|
||
|
$status['msg']="token缺失";
|
||
|
return $status;
|
||
|
}
|
||
|
|
||
|
$len=4;
|
||
|
$bear=substr($token,0,6);
|
||
|
if($bear=='Bearer'){
|
||
|
$len=6;
|
||
|
}
|
||
|
$token = trim(substr_replace($token,'',0,$len)," ");
|
||
|
try {
|
||
|
\Firebase\JWT\JWT::$leeway = 60;//当前时间减去60
|
||
|
$decoded = \Firebase\JWT\JWT::decode($token, new \Firebase\JWT\Key(env('ENCRYPT.ADMINSALT'), 'HS256'));
|
||
|
$arr = (array)$decoded;
|
||
|
$res['code']=1;
|
||
|
$res['data']=$arr['data'];
|
||
|
return $res;
|
||
|
|
||
|
} catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
|
||
|
$status['msg']="token签名不正确";
|
||
|
return $status;
|
||
|
}catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
|
||
|
$status['msg']="token失效";
|
||
|
return $status;
|
||
|
}catch(\Firebase\JWT\ExpiredException $e) { // token过期
|
||
|
$status['msg']="token失效";
|
||
|
|
||
|
return $status;
|
||
|
}catch(\Exception $e) { //其他错误
|
||
|
$status['msg']="未知错误";
|
||
|
return $status;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
}
|