私のwordpressサイトは、Cloudflareに似たキャッシュサービスであるAkamaiの背後にあります。
次のAPI呼び出しを行います。
GET /wp-json/mytheme/v1/get-posts?post_type=videos
これは、 '@ wordpress/api-fetch'のapiFetchを使用して行われます。
そして、これをリクエストヘッダーに自動的に含めます
X-WP-Nonce: 12323423
これは、ナンスの有効期限が切れる24時間後まで正常に機能します。キャッシュは引き続き有効期限切れのナンスを引き続き使用し、403禁止およびページの破損を引き起こします。
Nonceヘッダーなしで同じリクエストを実行すると、完全に正常に動作します。
Wordpressに、GETリクエストのみのノンスを無効または削除する方法はありますか?
または、リクエストをインターセプトしてX-WP-Nonceヘッダーを取り除きますか?
これは、wordpressフロントエンドから行われているリクエストを作成するための私のコードです。
apiFetch({
path: '/wp-json/mytheme/v1/get-posts?post_type=videos',
parse: false,
});
認証ドキュメントに基づく here -リクエストごとにnonceキーを渡す必要があります。
そのため、ナンスキーが有効期間を超えてフロントエンドでキャッシュされている場合は、認証ステップの前にAPIリクエストにフックし、キャッシュされたナンスキーを有効なものに置き換える必要があります。
WordPressは_rest_send_nocache_headers
_フィルターを提供し、( ここを参照 )にフックできます。これにより、認証前にアクションを実行できます。
_$send_no_cache_headers = apply_filters('rest_send_nocache_headers', is_user_logged_in());
if (!$send_no_cache_headers && !is_admin() && $_SERVER['REQUEST_METHOD'] == 'GET') {
$nonce = wp_create_nonce('wp_rest');
$_SERVER['HTTP_X_WP_NONCE'] = $nonce;
}
_
上記の例では、is_user_logged_in()
関数をパラメーターとして渡してフィルターにフックしています。これはtrueまたはfalseを返します。
次に、クエリでは、ユーザーがログインしていない場合、ユーザーは管理者ではありません。これはGET
リクエストであり、無効なnonceキーを有効なnonceキーに切り替えます。