回答:
で休憩ルートを登録すると、必要な種類の権限を持つパラメーターをregister_rest_route()
使用できますpermission_callback
。
たとえば、アクセス許可のコールバックの実装方法WP_REST_Posts_Controller::register_routes()
を確認してくださいWP_REST_Users_Controller::register_routes()
。
あなたが参照しているパスワード引数はコンテンツのパスワードであり、各投稿に設定でき、それは同じではありません。
しかし、次のように既存のルートをターゲットにしたいので:
/wp/v2/cards
/wp/v2/cards/(?P<id>[\d]+)
/wp/v2/cards/...possibly some other patterns...
たとえば、rest_dispatch_request
フィルターを試して、これらの種類のルートに対する追加のアクセス許可チェックをセットアップできます。
ここにデモプラグインがあります:
add_filter( 'rest_dispatch_request', function( $dispatch_result, $request, $route, $hndlr )
{
$target_base = '/wp/v2/cards'; // Edit to your needs
$pattern1 = untrailingslashit( $target_base ); // e.g. /wp/v2/cards
$pattern2 = trailingslashit( $target_base ); // e.g. /wp/v2/cards/
// Target only /wp/v2/cards and /wp/v2/cards/*
if( $pattern1 !== $route && $pattern2 !== substr( $route, 0, strlen( $pattern2 ) ) )
return $dispatch_result;
// Additional permission check
if( is_user_logged_in() ) // or e.g. current_user_can( 'manage_options' )
return $dispatch_result;
// Target GET method
if( WP_REST_Server::READABLE !== $request->get_method() )
return $dispatch_result;
return new \WP_Error(
'rest_forbidden',
esc_html__( 'Sorry, you are not allowed to do that.', 'wpse' ),
[ 'status' => 403 ]
);
}, 10, 4 );
ここで、ルート/wp/v2/cards
を/wp/v2/cards/*
GETし、追加のユーザー権限チェックを行います。
WordPressのCookie認証でデバッグする場合、たとえば次のように直接テストできます。
https://example.tld/wp-json/wp/v2/cards?_wpnonce=9467a0bf9c
nonceパーツがどこから生成されたか wp_create_nonce( 'wp_rest' );
お役に立てれば!
register_post_type_args
設定さ$args['show_in_rest'] = is_user_logged_in();
れた、またはに基づいて設定されたフィルターを使用して、特定のカスタム投稿タイプのエンドポイントを削除する方が簡単$args['rest_base']
です。それが望まれるか、推奨されるかどうかは
表示されている「password」フィールドは、実際にはREST API用ではなく、Postエントリ自体用です。WordPressの個々の投稿はパスワードで保護されているので、コンテンツを表示するにはパスワードが必要です。
この形式の個別のポストパスワードは、強力なパスワードメカニズムではなく、共有パスワードです。パスワードはすべてのユーザーで同じであり、暗号化もハッシュ化もされずにデータベースに保存されます。これは決して安全なメカニズムとして意図されたものではなく、コンテンツを簡単な方法で隠すシンプルなメカニズムです。
このメカニズムをREST APIで使用したい場合は、それが可能です。たとえば、個々の投稿のIDが123の場合、投稿は次のように取得できます。
http://example.com/wp-json/wp/v2/posts/123
その投稿がパスワードで保護されている場合、このURLはそれを取得します。
http://example.com/wp-json/wp/v2/posts/123?password=example-pass
リファレンス:https : //developer.wordpress.org/rest-api/reference/posts/#retrieve-a-post
より強力なユーザーベースの認証が必要な場合、WordPressは代わりに投稿を「非公開」にする方法を提供します。この設定により、「read_private_posts」機能を持つユーザーアカウントのみに投稿が表示されます。これは、デフォルトで管理者および編集者の役割に制限されています。(注:非公開は投稿コンテンツを非公開にするだけで、タイトルは引き続き公開されます。)
カスタム投稿タイプを作成すると、これと同じ機能が複数のタイプにマップされます(plural_baseを使用)。したがって、投稿タイプのカードの場合、必要に応じてユーザーの役割に割り当てるために使用できる同様の「read_private_cards」権限があります。
現在、ユーザーレベルの認証は実際にはREST APIに組み込まれていません。標準のWordPress Cookieベースの認証は正常に機能しますが、APIはそのCookieを取得する方法を提供していません。存在する場合は受け入れますが、このようなCookieを取得するには通常のログインフローを実行する必要があります。他の認証方法が必要な場合は、そのためのプラグインが必要です。
このようなプラグインは4つあります。これらは、OAuth 1.0、アプリケーションパスワード、JSON Webトークン、および基本認証プラグインです。基本認証が最も簡単ですが、これも安全ではないため、テストと開発の目的でのみ推奨されることに注意してください。稼働中の本番サーバーでは使用しないでください。
これらのプラグインの詳細については、次をご覧ください。
https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/#authentication-plugins