定制 yaobiao/think-jwt 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

yaobiao/think-jwt

Composer 安装命令:

composer require yaobiao/think-jwt

包简介

ThinkPHP Jwt Component

关键字:

README 文档

README

Build Status Scrutinizer Code Quality Code Coverage

只支持 thinkphp 6.0

安装

稳定版

$ composer require xiaodi/think-jwt

开发版

$ composer require xiaodi/think-jwt:dev-master

使用

  1. 命令生成签名key
$ php think jwt:make
  1. 配置 config/jwt.php

完整多应用配置

<?php

return [
    'default' => 'admin',
    'apps' => [
        'admin' => [
            'token' => [
                'uniqidKey'    => 'uid',
                'signerKey'    => '',
                'notBefore'    => 0,
                'expiresAt'    => 3600,
                'refreshTTL'   => 7200,
                'signer'       => 'Lcobucci\JWT\Signer\Hmac\Sha256',
                'type'         => 'Header',
                'refresh'      => 50001,
                'relogin'      => 50002,
                'iss'          => '',
                'aud'          => '',
                'automaticRenewal' => false,
            ],
            'user' => [
                'bind' => false,
                'model'  => '',
            ]
        ]
    ],
    'manager' => [
        // 缓存前缀
        'prefix' => 'jwt',
        // 黑名单缓存名
        'blacklist' => 'blacklist',
        // 白名单缓存名
        'whitelist' => 'whitelist'
    ]
];

token

  • uniqidKey 用户唯一标识
  • signerKey 密钥
  • notBefore 时间前不能使用 默认生成后直接使用
  • expiresAt Token有效期(秒)
  • signer 加密算法
  • type 获取 Token 途径
  • refresh Token过期抛异常code = 50001
  • relogin Token失效异常code = 50002
  • automaticRenewal 开启过期自动续签

user

  • bind 是否注入用户模型(中间件有效)
  • model 用户模型文件

blacklist

  • cacheKey 黑名单缓存key

以下两个异常都会抛一个HTTP异常 StatusCode = 401

  • xiaodi\Exception\HasLoggedException
  • xiaodi\Exception\TokenAlreadyEexpired

Token 生成

use xiaodi\JWTAuth\Facade\Jwt;

public function login()
{
    //...登录判断逻辑

    // 默认应用
    return json([
        'token' => Jwt::token(['uid' => 1]),
        'token_type' => Jwt::type(),
        'expires_in' => Jwt::ttl(),
        'refresh_in' => Jwt::refreshTTL()
    ]);
    
    // 指定应用
    return json([
        'token' => Jwt::store('wechat')->token(['uid' => 1]),
        'token_type' => Jwt::type(),
        'expires_in' => Jwt::ttl(),
        'refresh_in' => Jwt::refreshTTL()
    ]);
}

Token 验证

手动验证

use xiaodi\JWTAuth\Facade\Jwt;
use xiaodi\JWTAuth\Exception\HasLoggedException;
use xiaodi\JWTAuth\Exception\TokenAlreadyEexpired;

class User {

    public function test()
    {
        try {
            // 默认应用
            Jwt::verify($token);
            
            // 指定应用
            // Jwt::store('wechat')->verify($token);
        } catch (HasLoggedException $e) {
            // 已在其它终端登录
        } catch (TokenAlreadyEexpired $e) {
            // Token已过期
        }
        
        // 验证成功
        // 如 开启用户注入功能 可获取当前用户信息
        dump(Jwt::user());
    }
}

路由验证

use xiaodi\JWTAuth\Middleware\Jwt;

// 默认应用
Route::get('/hello', 'index/index')->middleware(Jwt::class);

// 指定应用
Route::get('/hello', 'index/index')->middleware(Jwt::class, 'wechat');

Token 自动获取

支持以下方式自动获取

  • Header
  • Cookie
  • Url

赋值方式

类型 途径 标识
Header Authorization Bearer Token
Cookie Cookie token
Url Request token
# config/jwt.php

<?php

return [

    'apps' => [
        'admin' => [
            'token' => [
                // ...其它配置
                'type' => 'Header',
                // 'type' => 'Cookie',
                // 'type' => 'Url',
                // 支持多种方式获取
                // 'type' => 'Header|Url',
            ]
        ]
    ]
    
];

过期自动续签

app/config/jwt.php

automaticRenewal => true

系统检测到 Token 已过期, 会自动续期并返回以下 header 信息。

  • Automatic-Renewal-Token
  • Automatic-Renewal-Token-RefreshAt

前端需要接收最新 Token,下次异步请求时,携带此 Token。

注销应用Token

注销指定应用下缓存的用户 (强制下线 重新登录)

$store = 'wechat';

app('jwt.manager')->resetStoreWhiteToken($store);

yaobiao/think-jwt 适用场景与选型建议

yaobiao/think-jwt 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 107 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 11 月 14 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「thinkphp」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 yaobiao/think-jwt 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 yaobiao/think-jwt 我们能提供哪些服务?
定制开发 / 二次开发

基于 yaobiao/think-jwt 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 107
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 18
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-11-14