Wordpress on _v5.4.0
_)のヘッドレスインストールを行っています。APIのURLに直接アクセスする場合、フロントエンドはdraft
ステータスの投稿を取得できません。データは問題なく返されます。これはcookie/auth関連であると想定しています。注意してください。バックエンドからnonce
値を動的に取得し、引数のためにここに完全な文字列を表示しています。ここに私の設定を示しますと応答のスクリーンショット:
リクエストURL:_http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true
_
次のように_isomorphic-unfetch
_を使用してフロントエンドで呼び出されます(axios
でも試行されます)。
_fetch("http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true", {
credentials: "include"
})
_
これは機能していないフロントエンドからのリクエスト/レスポンスです(これはすべてのpublished
コンテンツに対して機能しますdoes):
このボディで:
_{
"code":"rest_forbidden",
"message":"Sorry, you are not allowed to do that.",
"data":{
"status":401
}
}
_
データに直接アクセスしようとすると、wpnonce
クエリパラメーターの下線に応じて2つの異なる応答が表示されます。
これは機能し(__wpnonce
_を使用)、適切なJSONデータを返します。
_http://wordpress.test/wp-json/wp/v2/pages/19060?_wpnonce=23c01b3b12&_embed=true
_
詳細:
これは(wpnonce
を使用して)行いません:
_http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true
_
詳細:
フロントエンドと同じ応答エラーを返します。
_{
"code":"rest_forbidden",
"message":"Sorry, you are not allowed to do that.",
"data":{
"status":401
}
}
_
編集:
ここで言及されている_X-WP-Nonce
_ヘッダーも試しました( https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/ )。認識されていないようです:
_fetch(postUrl, {
credentials: "include",
headers: {
"X-WP-Nonce": wpnonce
}
})
_
_{"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}
_
編集2:
WPおよび新しいベアボーンフロントエンド(html + jquery)のクリーンインストールで、同じ問題が発生しています。ただし、プレビューリンクを生成するときにナンスは有効ですが、無効ですときWPは_rest_cookie_check_errors
_を使用して検証を試みます。同じアクションの同じナンス(_wp_rest
_)が検証に失敗する方法は?
RESTリクエストでCookieが見つからないため、wp_get_session_token()
が失敗しているようです。( https://core.trac.wordpress.org/browser /tags/5.4/src/wp-includes/pluggable.php#L214 )nonce
がCookieを必要としないのではないですか?クロスドメインCookieパスに問題がある可能性がありますか?
XHRで資格情報を送信しています。これが私のフロントエンドテストコードです。
_// GET page with Nonce header
$.ajax({
url: postUrl,
method: "GET",
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr) {
xhr.setRequestHeader("X-WP-Nonce", wpnonce);
xhr.setRequestHeader("Content-Type", "application/json");
}
})
_
2つの質問:
_wpnonce
_/wpnonce
クエリ変数がフロントエンドとバックエンドで異なる結果を表示するのですか?わかりましたので、技術的には、フロントエンドがdraft
値のみを使用してホストされている外部ドメインからnonce
ステータスの投稿にアクセスできなかった問題を解決しませんでした。私の推測では、logged_in
外部のAJAX=リクエスト中にnonce
の値を確認するために、フロントエンド側でCookieが設定されていない/読み取れませんでした。
つまり、WP REST APIプラグイン( https://github.com/Tmeister/wp- api-jwt-auth )そして、ローカルストレージにトークンを設定するには、管理者がフロントエンドのプレビューページに一度ログインする必要があります。