赞
踩
第一步,需要安装TP6框架,如果没有安装我给你一个composer
composer create-project topthink/think tp
第二步,需要安装一个PHP的jwt插件,也使用composer
composer require firebase/php-jwt
第三步,我们需要在文件里引用jwt
-
- use Firebase\JWT\JWT;
- use Firebase\JWT\Key;//key也要引用哦!
第四部,我们就可以开始加密了!
- public function createjwt(){
-
- $key='123ABC)!$';//这里是你的秘钥,需要和解密是保持一致!
-
- $token = array(
- "iss" => 'weixin', //签发者 可以为空
- "aud" => 'spospone', //面象的用户,可以为空
- "iat" => time(), //签发时间
- "nbf" => time(), //立马生效
- "exp" => time() + 7200, //token 过期时间 两小时
- "data" => [ //这里是的数据参数等,需要保存和取出的
- 'id' => '1',
- ]
- );
-
- return JWT::encode($token, $key, "HS256");
-
- }
第五步,上面如果能获得正常的token值,我们可以开始解密
- public function checkToken($jwt = '')
- {
- try {
- $key ='123ABC)!$';//这里是你的秘钥,需要和解密是保持一致!
- JWT::$leeway = 30; //当前时间减去30,把时间留点余地
- $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
- //上面这个解密很多都没有加new key();如下面图会报其他错误
- //$decoded = JWT::decode($jwt, $key, array('HS256'));
- $arr = (array)$decoded;
- $date['code']= "0";
- $date['data']= $arr;//数据输出
-
- } catch (\Firebase\JWT\SignatureInvalidException $e) {
- $date['code'] = "-1";
- $date['msg'] = '签名不正确';
- } catch (\Firebase\JWT\BeforeValidException $e) {
- $date['code'] = "-1";
- $date['msg'] = 'TOken 还没有生效';
- } catch (\Firebase\JWT\ExpiredException $e) {
- $date['code'] = "-1";
- $date['msg'] = 'token过期';
- } catch (\Exception $e) {
- $date['code'] = "-1";
- $date['msg'] = '其他错误';
- }
-
- return json_encode($date, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
- }
完毕!总结:主要可能出问题的地方就是new key()这个地方,下面的都是正常的判断逻辑,很报错逻辑,希望对你在使用JWT的时候有帮助!
上面完成之后我在使用过程中还是遇到点小问题,就是在项目解密的时候!我把第5步修改一下,然后做一个调用!
另外方案第五步:
- //解密方法
- public function checkToken($jwt = '')
- {
- try {
- JWT::$leeway = 30; //当前时间减去30,把时间留点余地
- $decoded = JWT::decode($jwt, new Key($this->key, 'HS256'));
- //上面这个解密很多都没有加new key();如下面图会报其他错误
- //$decoded = JWT::decode($jwt, $key, array('HS256'));
- $arr = (array)$decoded;
- $date['code']= "0";
- $date['data']= $arr;//数据输出
-
- } catch (\Firebase\JWT\SignatureInvalidException $e) {
- $date['code'] = "-1";
- //$date['msg'] = '签名不正确';
- } catch (\Firebase\JWT\BeforeValidException $e) {
- $date['code'] = "-1";
- //$date['msg'] = 'TOken 还没有生效';
- } catch (\Firebase\JWT\ExpiredException $e) {
- $date['code'] = "-2";
- //$date['msg'] = 'token过期';
- } catch (\Exception $e) {
- $date['code'] = "-1";
- //$date['msg'] = '其他错误';
- }
-
-
- return $date;
- }
第六步来一个项目解密:
-
- $res = request()->param();
- $index = new \app\controller\admin\PublicText($this->app);
- $tokenCode =$index->checkToken($res['access_token']);
-
- if(json_decode($tokenCode['code']) != '0'){
- return json([ "code"=> '1001',"msg"=>"登录异常,请从新登录"]);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。