angelonibo / think-jwt

ThinkPHP Jwt 扩展包

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

think-jwt

Build Status Scrutinizer Code Quality Code Coverage

只支持 thinkphp 6.0

安装

$ composer require xiaodi/think-jwt

使用

  1. 命令生成签名key
$ php think jwt:make
  1. 配置 config/jwt.php
  • uniqidKey 用户唯一标识
  • signerKey 密钥
  • notBefore 时间前不能使用 默认生成后直接使用
  • expiresAt Token有效期(秒)
  • signer 加密算法
  • type 获取 Token 途径
  • inject 是否注入用户模型
  • model 用户模型
  • refresh Token过期抛异常code = 50001
  • relogin Token失效异常code = 50002

以下两个异常都会抛一个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()
    ]);
}

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);
        } catch (HasLoggedException $e) {
            // 已在其它终端登录
        } catch (TokenAlreadyEexpired $e) {
            // Token已过期
        }
        
        // 验证成功
        // 如 开启用户注入功能 可获取当前用户信息
        dump(Jwt::user());
    }
}

中间件验证

use xiaodi\JWTAuth\Jwt;

use app\model\User;

class UserController {
    protected $middleware = ['JwtMiddleware'];

    public function test(Jwt $jwt)
    {
        var_dump($jwt->getClaims());
    }

    // 开启用户模型注入
    public function user(User $user)
    {
        var_dump($user->nickname);
    }
}

Token 自动获取

支持以下方式自动获取

  • Header
  • Cookie
  • Url

赋值方式

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

<?php

return [

    'default' => [
        // ...其它配置
        'type' => 'Header',
        
        // 'type' => 'Cookie',
        // 'type' => 'Url',
    ]
    
];

About

ThinkPHP Jwt 扩展包

License:Apache License 2.0


Languages

Language:PHP 100.0%