私は現在、WP-REST v2プラグインを使って小さなREST APIを構築しています。すべてが完璧に動作していますが、ドキュメントにはパーミッションコールバックがあり、これは特定のユーザグループへのアクセスを制限します(まさに私がやろうとしていることです)。提供される構文は次のとおりです。
'permission_callback' => function () {
return current_user_can( 'edit_others_posts' );
}
私が抱えている問題は、ログインして管理アカウントとして認証されているにもかかわらず、実行時に現在のユーザーが空になっているということです(セッショントークンはリクエストの前、最中、後に存在します)。私は、ルートエンドポイントがレスポンステキスト以外の何もないページを返すことが原因かもしれないと考えたので、私はindex.phpからAPIを呼び出そうとし、wp_get_current_user();
が空のユーザーオブジェクトを返すのでcurrent_user_can('condition')
は決して成功しません。
助けてくれてありがとう!
問題は、リクエストでnonce
値を生成して送信していなかったためです。 nonce
値を生成するために。 wp_create_nonce('wp_rest')
関数呼び出しの値をローカライズします。
wp_localize_script('application', 'api', array(
'root' => esc_url_raw(rest_url()),
'nonce' => wp_create_nonce('wp_rest')
));
これはJavascriptを介してアクセスできるブラウザのwindow
オブジェクトにアクセス可能になります。このnonce
はXHR/HTTP Requestsを実行するときにリクエストヘッダX-WP-Nonce
の値として渡されるべきです。その例は次のとおりです。
var request = new XMLHttpRequest();
request.addEventListener('load', function() {
console.log(this.responseText);
}
request.open('GET', api.root + 'mynamespace/posts');
// You must set headers after the request has been opened and before itself.
request.setRequestHeader('X-WP-Nonce`, api.nonce);
request.send(); // will fire the event listener above when fulfilled.
これが役に立ったことを願っています。