只支持 thinkphp 6.0
$ composer require xiaodi/think-jwt
- 命令生成签名key
$ php think jwt:make
- 配置
config/jwt.php
uniqidKey
用户唯一标识signerKey
密钥notBefore
时间前不能使用 默认生成后直接使用expiresAt
Token有效期(秒)signer
加密算法type
获取 Token 途径inject
是否注入用户模型model
用户模型refresh
Token过期抛异常code = 50001relogin
Token失效异常code = 50002
以下两个异常都会抛一个HTTP异常 StatusCode = 401
xiaodi\Exception\HasLoggedException
xiaodi\Exception\TokenAlreadyEexpired
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()
]);
}
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);
}
}
支持以下方式自动获取
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',
]
];