赞
踩
使用Composer安装依赖库,终端切换到项目根目录输入如下
composer require firebase/php-jwt
下面是示例代码:
- <?php
- namespace app\common\base;
-
- use Firebase\JWT\JWT;
- use Firebase\JWT\Key;
-
- class Token
- {
-
- /**
- * 创建 token
- * @param array $data 必填 自定义参数数组
- * @param integer $exp_time 必填 token过期时间 单位:秒 例子:7200=2小时
- * @param string $scopes 选填 token标识,请求接口的token
- * @return string
- */
- public static function createToken($data = "", $exp_time = 0, $scopes = "")
- {
-
- //JWT标准规定的声明,但不是必须填写的;
- //iss: jwt签发者
- //sub: jwt所面向的用户
- //aud: 接收jwt的一方
- //exp: jwt的过期时间,过期时间必须要大于签发时间
- //nbf: 定义在什么时间之前,某个时间点后才能访问
- //iat: jwt的签发时间
- //jti: jwt的唯一身份标识,主要用来作为一次性token。
- //公用信息
- $key = 'api'; //自定义一个key
- $time = time(); //当前时间
- $token['iss'] = ''; //签发者 可选
- $token['aud'] = ''; //接收该JWT的一方,可选
- $token['iat'] = $time; //签发时间
- $token['nbf'] = $time; //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
- if ($scopes) {
- $token['scopes'] = $scopes; //token标识,请求接口的token
- }
- if (!$exp_time) {
- $exp_time = 7200*12;//默认=24小时过期
- }
- $token['exp'] = $time + $exp_time; //token过期时间,这里设置2个小时
- if ($data) {
- $token['data'] = $data; //自定义参数
- }
- $alg = 'HS256'; //签名算法方式
- // $keyId = "keyId"; //这个有时必须要加上,不加上,报错,报错内容:'"kid" empty, unable to lookup correct key'
- $jwt = JWT::encode($token, $key, $alg);
- return $jwt; //返回给客户端token信息
- }
-
- /**
- * 验证token是否有效,默认验证exp,nbf,iat时间
- * @param string $jwt 需要验证的token
- * @return string $msg 返回消息
- */
- public static function explainToken($jwt)
- {
- $key = new Key('api', 'HS256'); // 必须是 Firebase\JWT\Key;的对象
- JWT::$leeway = 60;//当前时间减去60,把时间留点余地
- try {
- $decoded = JWT::decode($jwt, $key);
- $arr = (array)$decoded;
- $returndata['code'] = "200";//200=成功
- $returndata['msg'] = "成功";//
- $returndata['data'] = $arr;//返回的数据
- return json_encode($returndata); //返回信息
- } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
- $returndata['code'] = "101";//101=签名不正确
- $returndata['msg'] = $e->getMessage();
- $returndata['data'] = "";//返回的数据
- return json_encode($returndata); //返回信息
- } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
- $returndata['code'] = "102";//102=签名不正确
- $returndata['msg'] = $e->getMessage();
- $returndata['data'] = "";//返回的数据
- return json_encode($returndata); //返回信息
- } catch (\Firebase\JWT\ExpiredException $e) { // token过期
- $returndata['code'] = "103";//103=签名不正确
- $returndata['msg'] = $e->getMessage();
- $returndata['data'] = "";//返回的数据
- return json_encode($returndata); //返回信息
- } catch (Exception $e) { //其他错误
- $returndata['code'] = "199";//199=签名不正确
- $returndata['msg'] = $e->getMessage();
- $returndata['data'] = "";//返回的数据
- return json_encode($returndata); //返回信息
- }
- }
-
-
-
-
-
-
-
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。