iqual/authenticated_cache_warmer

该软件包最新版本(1.0.0-beta)没有可用的许可证信息。

一个用于为需要身份验证的端点预热缓存的模块。

安装: 732

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 1

分支: 0

开放问题: 0

类型:drupal-custom-module

1.0.0-beta 2024-04-22 19:02 UTC

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一起运行。