当前位置:   article > 正文

TP6 使用jwt生成token加密解密_tp6 把id加密成token

tp6 把id加密成token

第一步,需要安装TP6框架,如果没有安装我给你一个composer

composer create-project topthink/think tp

第二步,需要安装一个PHP的jwt插件,也使用composer

composer require firebase/php-jwt

第三步,我们需要在文件里引用jwt

  1. use Firebase\JWT\JWT;
  2. use Firebase\JWT\Key;//key也要引用哦!

第四部,我们就可以开始加密了!

  1. public function createjwt(){
  2. $key='123ABC)!$';//这里是你的秘钥,需要和解密是保持一致!
  3. $token = array(
  4. "iss" => 'weixin', //签发者 可以为空
  5. "aud" => 'spospone', //面象的用户,可以为空
  6. "iat" => time(), //签发时间
  7. "nbf" => time(), //立马生效
  8. "exp" => time() + 7200, //token 过期时间 两小时
  9. "data" => [ //这里是的数据参数等,需要保存和取出的
  10. 'id' => '1',
  11. ]
  12. );
  13. return JWT::encode($token, $key, "HS256");
  14. }

第五步,上面如果能获得正常的token值,我们可以开始解密

  1. public function checkToken($jwt = '')
  2. {
  3. try {
  4. $key ='123ABC)!$';//这里是你的秘钥,需要和解密是保持一致!
  5. JWT::$leeway = 30; //当前时间减去30,把时间留点余地
  6. $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
  7. //上面这个解密很多都没有加new key();如下面图会报其他错误
  8. //$decoded = JWT::decode($jwt, $key, array('HS256'));
  9. $arr = (array)$decoded;
  10. $date['code']= "0";
  11. $date['data']= $arr;//数据输出
  12. } catch (\Firebase\JWT\SignatureInvalidException $e) {
  13. $date['code'] = "-1";
  14. $date['msg'] = '签名不正确';
  15. } catch (\Firebase\JWT\BeforeValidException $e) {
  16. $date['code'] = "-1";
  17. $date['msg'] = 'TOken 还没有生效';
  18. } catch (\Firebase\JWT\ExpiredException $e) {
  19. $date['code'] = "-1";
  20. $date['msg'] = 'token过期';
  21. } catch (\Exception $e) {
  22. $date['code'] = "-1";
  23. $date['msg'] = '其他错误';
  24. }
  25. return json_encode($date, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  26. }

完毕!总结:主要可能出问题的地方就是new key()这个地方,下面的都是正常的判断逻辑,很报错逻辑,希望对你在使用JWT的时候有帮助!

上面完成之后我在使用过程中还是遇到点小问题,就是在项目解密的时候!我把第5步修改一下,然后做一个调用!

另外方案第五步:

  1. //解密方法
  2. public function checkToken($jwt = '')
  3. {
  4. try {
  5. JWT::$leeway = 30; //当前时间减去30,把时间留点余地
  6. $decoded = JWT::decode($jwt, new Key($this->key, 'HS256'));
  7. //上面这个解密很多都没有加new key();如下面图会报其他错误
  8. //$decoded = JWT::decode($jwt, $key, array('HS256'));
  9. $arr = (array)$decoded;
  10. $date['code']= "0";
  11. $date['data']= $arr;//数据输出
  12. } catch (\Firebase\JWT\SignatureInvalidException $e) {
  13. $date['code'] = "-1";
  14. //$date['msg'] = '签名不正确';
  15. } catch (\Firebase\JWT\BeforeValidException $e) {
  16. $date['code'] = "-1";
  17. //$date['msg'] = 'TOken 还没有生效';
  18. } catch (\Firebase\JWT\ExpiredException $e) {
  19. $date['code'] = "-2";
  20. //$date['msg'] = 'token过期';
  21. } catch (\Exception $e) {
  22. $date['code'] = "-1";
  23. //$date['msg'] = '其他错误';
  24. }
  25. return $date;
  26. }

第六步来一个项目解密:

  1. $res = request()->param();
  2. $index = new \app\controller\admin\PublicText($this->app);
  3. $tokenCode =$index->checkToken($res['access_token']);
  4. if(json_decode($tokenCode['code']) != '0'){
  5. return json([ "code"=> '1001',"msg"=>"登录异常,请从新登录"]);
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/499987
推荐阅读
相关标签
  

闽ICP备14008679号