kozlovsv/yii2-jwt-storage-redis

yii2-jwt-auth 组件的 Redis 存储方案

dev-main 2023-04-14 14:41 UTC

This package is auto-updated.

Last update: 2024-09-14 18:04:24 UTC


README

kozlovsv/yii2-jwt-auth 的 Redis 存储组件。

该组件提供在 Redis 缓存中存储令牌的功能

如果你的应用程序使用 Redis 缓存,并且需要删除特定用户保存的所有访问和刷新令牌的功能,则应使用此组件。

标准的应用程序缓存组件(在 TokenStorageCache 类中使用),在写入或读取之前将所有键转换为 MD5 哈希,因此无法获取特定用户的全部键。缓存中的所有键看起来像:402849137963e1945d01315c4f61662f

TokenStorageRedis 组件直接执行 Redis 命令,而不使用标准缓存类的命令。因此,键不以 MD5 格式化,而是以原始形式存储在缓存中。

键的格式为 api:token:user_id:token_id。

示例:api:token:1425:9f3898ca702c9c9f4991c63dc7eb0e13。

这种格式允许您通过搜索掩码获取存储在缓存中的特定用户的全部键。例如,api:token:1425:* 将检索用户 ID 1425 的所有存储令牌。

这使得可以从存储中删除该用户的所有键。

例如,当您需要注销特定用户的所有授权设备时。

默认键存储组件不允许您执行此功能。

安装

通过 composer 安装此扩展是首选方式。

运行

php composer.phar require --prefer-dist kozlovsv/yii2-jwt-storage-redis "@dev"

或添加

"kozlovsv/yii2-jwt-storage-redis": "@dev"

到您的 composer.json 文件的 require 部分。

依赖关系

基本用法

编辑配置文件中的 jwt 组件

'components' => [
    'jwt' => [
        'class' => \kozlovsv\jwtauth\Jwt::class,
        ...
        'tokenStorage' => \kozlovsv\jwtredis\TokenStorageRedis::class, //Set Redis storage class
    ],
],

例如,向模型 app\models\User 添加方法 afterSave()

public function afterSave($insert, $changedAttributes)
    // Purge the user tokens when the password is changed
    if (array_key_exists('password_hash', $changedAttributes)) {
        /** @var Jwt $jwtServ */
        $jwtServ = Yii::$app->get('jwt', false);
        $jwtServ?->tokenStorage->deleteAllForUser($this->id);
    }

    parent::afterSave($insert, $changedAttributes);
}