77 lines
2.5 KiB
PHP
77 lines
2.5 KiB
PHP
<?php
|
||
|
||
/**
|
||
* @Descripttion : FOXCMS 是一款高效的 PHP 多端跨平台内容管理系统
|
||
* @Author : FoxCMS Team
|
||
* @Date : 2023/6/26 17:55
|
||
* @version : V1.08
|
||
* @copyright : ©2021-现在 贵州黔狐科技股份有限公司 版权所有
|
||
* @LastEditTime : 2023/6/26 17:55
|
||
*/
|
||
|
||
use app\api\exception\HttpRespException;
|
||
use Firebase\JWT\JWT;
|
||
use Firebase\JWT\Key;
|
||
use think\Response;
|
||
|
||
// 成功
|
||
function success($msg = '', string $url = null, $data = '')
|
||
{
|
||
$result = [
|
||
'code' => 1,
|
||
'msg' => $msg,
|
||
'data' => $data
|
||
];
|
||
throw new HttpRespException(Response::create($result, 'json'));
|
||
}
|
||
|
||
// 错误
|
||
function error($msg = '', $data = '', $code = 0)
|
||
{
|
||
$result = [
|
||
'code' => $code,
|
||
'msg' => $msg,
|
||
'data' => $data,
|
||
];
|
||
throw new HttpRespException(Response::create($result, 'json'));
|
||
}
|
||
|
||
// 生成验签
|
||
function signToken($data)
|
||
{
|
||
$key = config("jwt.key"); //自定义的一个随机字串用户于加密中常用的 盐 salt
|
||
$token = array(
|
||
"iss" => config("jwt.iss"), //签发者 可以为空
|
||
"aud" => '', //面象的用户,可以为空
|
||
"iat" => config("jwt.iat"), //签发时间
|
||
"nbf" => config("jwt.nbf"), //在什么时候jwt开始生效
|
||
"exp" => config("jwt.exp"), //token 过期时间
|
||
"data" => $data
|
||
);
|
||
$jwt = JWT::encode($token, $key, config("jwt.alg")); //生成了 token
|
||
return $jwt;
|
||
}
|
||
|
||
// 验证token
|
||
function checkToken($token)
|
||
{
|
||
$key = config("jwt.key"); //自定义的一个随机字串用户于加密中常用的 盐 salt
|
||
$res['status'] = false;
|
||
try {
|
||
JWT::$leeway = 60; //当前时间减去60,把时间留点余地
|
||
$decoded = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,这里要和签发的时候对应
|
||
$arr = (array)$decoded;
|
||
$res['status'] = true;
|
||
$res['info'] = "解析token成功";
|
||
$res['data'] = (array)$arr['data'];
|
||
return $res;
|
||
} catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
|
||
error("签名不正确", "", config("code.token_error"));
|
||
} catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
|
||
error("token失效");
|
||
} catch (\Firebase\JWT\ExpiredException $e) { // token过期
|
||
error("token过期", "", config("code.token_error"));
|
||
} catch (Exception $e) { //其他错误
|
||
error("未知错误", "", config("code.token_error"));
|
||
}
|
||
} |