Skip to content

Commit 44d704f

Browse files
authored
Merge pull request #17 from tx9991/a9991
refresh_token进行储存reids
2 parents 1dc9807 + 6918f8a commit 44d704f

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

src/JwtToken.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ public static function refreshToken(): array
121121
}
122122
if ($config['is_single_device']) {
123123
$client = $extend['extend']['client'] ?? self::TOKEN_CLIENT_WEB;
124-
RedisHandler::generateToken($config['cache_token_pre'], (string)$client, (string)$extend['extend']['id'], $extend['exp'], $newToken['access_token']);
124+
RedisHandler::generateToken($config['cache_token_pre'], (string)$client, (string)$extend['extend']['id'], $config['access_exp'], $newToken['access_token']);
125+
RedisHandler::refreshToken($config["cache_refresh_token_pre"], (string)$client, (string)$extend['extend']['id'], $config['refresh_exp'], $newToken['refresh_token']);
125126
}
126127
return $newToken;
127128
}
@@ -154,6 +155,7 @@ public static function generateToken(array $extend): array
154155
if ($config['is_single_device']) {
155156
$client = $extend['client'] ?? self::TOKEN_CLIENT_WEB;
156157
RedisHandler::generateToken($config['cache_token_pre'], (string)$client, (string)$extend['id'], $config['access_exp'], $token['access_token']);
158+
RedisHandler::generateToken($config["cache_refresh_token_pre"], (string)$client, (string)$extend['id'], $config['refresh_exp'], $token['refresh_token']);
157159
}
158160
return $token;
159161
}
@@ -250,9 +252,13 @@ private static function verifyToken(string $token, int $tokenType): array
250252

251253
$decoded = JWT::decode($token, new Key($publicKey, $config['algorithms']));
252254
$decodeToken = json_decode(json_encode($decoded), true);
253-
if ($config['is_single_device'] && self::ACCESS_TOKEN == $tokenType) {
255+
if ($config['is_single_device']) {
256+
$cacheTokenPre = $config['cache_token_pre'];
257+
if ($tokenType == self::REFRESH_TOKEN) {
258+
$cacheTokenPre = $config['cache_refresh_token_pre'];
259+
}
254260
$client = $decodeToken['extend']['client'] ?? self::TOKEN_CLIENT_WEB;
255-
RedisHandler::verifyToken($config['cache_token_pre'], $client, (string)$decodeToken['extend']['id'], $token);
261+
RedisHandler::verifyToken($cacheTokenPre, $client, (string)$decodeToken['extend']['id'], $token);
256262
}
257263
return $decodeToken;
258264
}
@@ -365,7 +371,9 @@ public static function clear(string $client = self::TOKEN_CLIENT_WEB): bool
365371
{
366372
$config = self::_getConfig();
367373
if ($config['is_single_device']) {
368-
return RedisHandler::clearToken($config['cache_token_pre'], $client, (string)self::getCurrentId());
374+
$clearCacheRefreshTokenPre = RedisHandler::clearToken($config['cache_refresh_token_pre'], $client, (string)self::getCurrentId());
375+
$clearCacheTokenPre = RedisHandler::clearToken($config['cache_token_pre'], $client, (string)self::getCurrentId());
376+
return $clearCacheTokenPre && $clearCacheRefreshTokenPre;
369377
}
370378
return true;
371379
}

src/RedisHandler.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,26 @@ public static function generateToken(string $pre, string $client, string $uid, i
3636
Redis::setex($cacheKey, $ttl, $token);
3737
}
3838

39+
40+
/**
41+
* @desc: 刷新存储的缓存令牌
42+
* @param string $pre
43+
* @param string $client
44+
* @param string $uid
45+
* @param int $ttl
46+
* @param string $token
47+
* @return void
48+
*/
49+
public static function refreshToken(string $pre, string $client, string $uid, int $ttl, string $token): void
50+
{
51+
$cacheKey = $pre . $client . ':' . $uid;
52+
$key = Redis::keys($cacheKey . '*');
53+
if (!empty($key)) {
54+
$ttl = Redis::ttl($cacheKey);
55+
}
56+
Redis::setex($cacheKey, $ttl, $token);
57+
}
58+
3959
/**
4060
* @desc: 检查设备缓存令牌
4161
* @param string $pre

src/config/plugin/tinywan/jwt/app.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
/** 缓存令牌前缀,默认 JWT:TOKEN: */
4040
'cache_token_pre' => 'JWT:TOKEN:',
4141

42+
/** 缓存刷新令牌前缀,默认 JWT:REFRESH_TOKEN: */
43+
'cache_refresh_token_pre' => 'JWT:REFRESH_TOKEN:',
44+
4245
/** 用户信息模型 */
4346
'user_model' => function ($uid) {
4447
return [];

0 commit comments

Comments
 (0)