JWT使用

JWT使用

标签(空格分隔): php

安装

composer require lcobucci/jwt

使用




<?php
namespace app\common\auth;

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

class JwtAuth
{
private static $instance;

private $token;

private $decodeToken;

private $iis = 'web.tp5.cn';

private $aud = 'web.tp5.cn';

private $uid;

private $configId;

private $secret = 'web.tp5.cn';

private function __construct() {}

public static function getInstance()
{
    if (!self::$instance) self::$instance = new self();
    return self::$instance;
}

private function __clone() {}

public function setUid($uid)
{
    $this->uid = $uid;
    return $this;
}

public function setConfigId($configId)
{
    $this->configId = $configId;
    return $this;
}

public function getToken()
{
    return (string)$this->token;
}

public function setToken($token)
{
    $this->token = $token;
    return $this;
}

public function encode()
{
    $time = time();
    $this->token = (new Builder())->setHeader('alg', 'HS256')
            ->setIssuedAt($this->iis)
            ->setAudience($this->aud)
            ->setIssuedAt($time)
            ->setExpiration($time + 120)
            ->set('uid', $this->uid)
            ->set('configId', $this->configId)
            ->sign(new Sha256(), $this->secret)
            ->getToken();
    return $this;
}

public function decode()
{
    if (!$this->decodeToken) {
        $this->decodeToken = (new Parser())->parse((string) $this->token);
        $this->uid = $this->decodeToken->getClaim('uid');
        $this->configId = $this->decodeToken->getClaim('configId');
    }
    return $this->decodeToken;
}

public function verify()
{
    return $this->decode()->verify(new Sha256(), $this->secret);
}

public function validate()
{
    $data = new ValidationData();
    $data->setIssuer($this->iis);
    $data->setAudience($this->aud);
    return $this->decode()->validate($data);
}
posted @   TaylorSWMM  阅读(633)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示