iqual / authenticated_cache_warmer
该软件包最新版本(1.0.0-beta)没有可用的许可证信息。
一个用于为需要身份验证的端点预热缓存的模块。
1.0.0-beta
2024-04-22 19:02 UTC
Requires
- php: ^8.1
- drupal/core: ^10
This package is auto-updated.
Last update: 2024-09-22 19:50:55 UTC
README
此模块允许在需要身份验证的路由上预热缓存。它通过使用account_switcher
服务和状态键来模拟用户在EventSubscriber中,以实现验证预热请求(见安全部分)。
用法
此模块仅提供创建自己的缓存预热服务API。您需要实现自己的drush命令或cron作业来实际运行缓存预热。
要使用API,您需要以下数据
- 您想要调用的路由(例如
entity.node.canonical
) - 要请求的实体ID
- 要模拟的用户ID
- (可选)GuzzleHttpClient的Http选项
然后您创建一个或多个CacheWarmUrl,并将它们提供给authenticated_cache_warmer.cache_warmer
服务。该服务将使用相应的用户帐户调用所有提供的URL,最多10个并行调用。
示例
以下代码段将模拟用户2和3预热节点1和2。
use Drupal\authenticated_cache_warmer\CacheWarmerUrl; // Set up data. $route = 'entity.node.canonical'; $entity_ids = [1, 2]; $user_ids = [2, 3]; // Set up urls. $urls = []; foreach($user_ids as $user_id) { foreach($entity_ids as $entity_id) { $urls[] = CacheWarmerUrl::create($route, ['node' => $entity_id], $user_id); } } // Run cache warming (use proper DI for service). $cacheWarmer = \Drupal::service('authenticated_cache_warmer.cache_warmer'); $cacheWarmer->seturls($urls); $cacheWarmer->warm();
关于CacheWarmerUrl的建议
- CacheWarmerUrl扩展Drupal/Core/Url,因此您可以使用所有
from*
方法。然后您需要使用setAccountId()
设置用户帐户。 - 您可以通过
setHttpOptions()
或将它们作为创建方法的第四个参数传递,将选项传递给用于调用的GuzzleHttpClient。有关详细信息,请参阅GuzzleHttp\ClientInterface::requestAsync
。
安全
请求通过在开始预热时生成并存储一个随机密钥来安全,该密钥随后作为cookie值与请求一起传递。EventSubscriber检查密钥是否在Drupal的状态中且处于活动状态。
这意味着调用客户端需要与同一个Drupal环境/db一起运行。