前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >thinkphp6 token令牌 生成详解

thinkphp6 token令牌 生成详解

作者头像
用户8099761
发布2023-05-11 15:59:29
8490
发布2023-05-11 15:59:29
举报
文章被收录于专栏:私人订制私人订制

composer 安装 composer require lcobucci/jwt 3.3 在extend/tools/jwt创建Token.php 注意:如果没有该目录,则自行创。

生成Token(createToken)

代码语言:javascript
复制
<?php
namespace tools\jwt;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;

/**
 * Created by PhpStorm.
 * User: asus
 * Date: 2019/4/5
 * Time: 13:02
 */
class Token
{
     public static function createToken($uid = null)
     {
            $signer = new Sha256();//加密规则
            $time = time();//当前时间

            $token = (new Builder())
                ->issuedBy('teacher')//签发人
                ->canOnlyBeUsedBy('student')//接收人
                ->identifiedBy('MarsLei', true) //标题id
                ->issuedAt($time)//发出令牌的时间
                ->canOnlyBeUsedAfter($time) //生效时间(即时生效)
                ->expiresAt($time + 3600) //过期时间
                ->with('uid', $uid) //用户id
                ->sign($signer, 'my') //签名
                ->getToken(); //得到token
            return (string)$token;
        }
}

验证Token(verifyToken)

代码语言:javascript
复制
public static function verifyToken($token=null){
        //检测是否接收到了token
        if(empty($token)){
            return 0;
        }
        //转化为可以验证的token
        $token = (new Parser())->parse((string) $token);
        //验证基本设置
        $data = new ValidationData();
        $data->setIssuer('teacher');
        $data->setAudience('student');
        $data->setId('MarsLei');

        if(!$token->validate($data)){
            return 0;
        }
        //验证签名
        $signer = new Sha256();
        if(!$token->verify($signer, 'my')){
            return 0;
        }
        //验证通过,返回用户id
        return $token->getClaim('uid');
    }

获取Token(getRequestToken)

代码语言:javascript
复制
public static function getRequestToken()
    {
        if (empty($_SERVER['HTTP_AUTHORIZATION'])) {
            return false;
        }

        $header = $_SERVER['HTTP_AUTHORIZATION'];
        $method = 'bearer';
        //去除token中可能存在的bearer标识
        return trim(str_ireplace($method, '', $header));
    }

回收实例

重写apache

代码语言:javascript
复制
    RewriteCond %{HTTP:Authorization} ^(.+)$
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

回收token

代码语言:javascript
复制
    //清空token  将需清空的token存入缓存,再次使用时,会读取缓存进行判断
    $token = \Token::getRequestToken();
    $delete_token = cache('delete_token') ?: [];
    $delete_token[] = $token;
    cache('delete_token', $delete_token, 86400);
    $this->ok();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成Token(createToken)
  • 验证Token(verifyToken)
  • 获取Token(getRequestToken)
  • 回收实例
    • 重写apache
      • 回收token
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档