ThinkPHP5框架中使用JWT的方法示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-12 13:32:40 浏览: 评论:0
本文实例讲述了ThinkPHP5框架中使用JWT的方法,分享给大家供大家参考,具体如下:
JWT下载地址:https://jwt.io
可以直接去github上下载,也可以使用composer
使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下
创建文件
我是放在common目录下
使用教程
github都有的
贴源码
JWTAuth.php
- <?php
- namespace app\common\Auth;
- use \Lcobucci\JWT\Builder;
- use \Lcobucci\JWT\Signer\Hmac\Sha256;
- use \Lcobucci\JWT\Parser;
- use \Lcobucci\JWT\ValidationData;
- /**
- * 单例模式
- */
- 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 用来测试
- <?php
- namespace app\index\controller;
- use app\common\Auth\JWTAuth;
- 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过期,客户端就要重新登录。
Tags: JWT
- 上一篇:Thinkphp5框架异常处理操作实例分析
- 下一篇:最后一页
相关文章
- ·thinkphp框架使用JWTtoken的方法详解(2021-12-28)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)