ThinkPHP5框架中使用JWT的方法示例

2020-09-01 11:05:40

本文实例讲述了ThinkPHP5框架中使用JWT的方法。分享给大家供大家参考,具体如下:

JWT下载地址:https://jwt.io

可以直接去github上下载,也可以使用composer

使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下

创建文件

我是放在common目录下

ThinkPHP5框架中使用JWT的方法示例

使用教程

github都有的

贴源码

JWTAuth.php

<?phpnamespace appcommonAuth;use LcobucciJWTBuilder;use LcobucciJWTSignerHmacSha256;use LcobucciJWTParser;use LcobucciJWTValidationData;/** * 单例模式 */class JWTAuth{    private static $instance;    /**     * JWT TOKEN     * @var [type]     */    private $token;    /**     * 颁发     * @var string     */    private $iss = 'api.test.com';    /**     * 接收     * @var string     */    private $aud = 'app.com';     private $uid;     private $secrect="#$%#$%*&^(*(*(";     private $decodeToken;     public static function getInstance() {        if(is_null(self::$instance)) {            self::$instance = new self();        }        return self::$instance;    }     private function __contruct(){     }     private function __clone(){     }     public function encode(){        $time = time();        $this->token = (new builder())->setHeader('alg','HS256')            ->setIssuer($this->iss)            ->setAudience($this->aud)            ->setIssuedAt($time) //生效时间            ->setExpiration($time + 20)//过期时间            ->set('uid',$this->uid)            ->sign(new Sha256(), $this->secrect)//加密算法            ->getToken();             return $this;    }     public function getToken(){        return (string)$this->token;    }     public function setToken($token){        $this->token = $token;        return $this;    }    /**     * 用户信息uid     * @param [type] $uid [description]     */    public function setUid($uid){        $this->uid = $uid;        return $this;    }     public function jsonDecode(){         $token = $this->token;        $this->decodeToken = (new Parser())->parse((string) $token);          // echo $this->decodeToken->getClaim('uid');        return $this->decodeToken;    }    /**     * 验证令牌是否有效     * @return [type] [description]     */    public function validate(){         $data = new ValidationData();        $data->setIssuer($this->iss);        $data->setAudience($this->aud);        return $this->jsonDecode()->validate($data);     }    /**     * 签名来验证令牌在生成后是否未被修改     * @return [type] [description]     */    public function verify(){        $result = $this->jsonDecode()->verify(new Sha256(), $this->secrect);        return $result;    } }

user.php 用来测试

<?phpnamespace appindexcontroller;use appcommonAuthJWTAuth; class User{     public function login(){                $jwtAuth = JWTAuth::getInstance();        $token = $jwtAuth->setUid(1)->encode()->getToken();        echo $token;        // var_dump(success_json_data(['token'=>$token]));    }     public function check_login(){        $jwtAuth = JWTAuth::getInstance();        $jwtAuth->setToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkudGVzdC5jb20iLCJhdWQiOiJhcHAuY29tIiwiaWF0IjoxNTU2MDk1MDI5LCJleHAiOjE1NTYwOTUwNDksInVpZCI6MX0.oi4rLbQFNZUJsW4fVHWiOQxfEmomuvldAV-gFKl2V74');         if($jwtAuth->validate() && $jwtAuth->verify()){            echo '验证成功';        }else{            echo '登录过期';        }     }}

最后

jwt本身的话是不带token刷新方法,所以一旦token过期,客户端就要重新登录。

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

相关文章 大家在看