2017-05-01 35 views
0

WP REST APIを介して公開するカスタム投稿タイプcardがあります。WP REST API既存のエンドポイントのアクセス許可を設定する

デフォルトでは、エンドポイントは公開されているようです。 GET /cards/に認証クッキーまたはヘッダーが必要となるように、エンドポイントの認証要件を設定するにはどうすればよいですか。

APIハンドブックにカスタムエンドポイントを書き込む方法が示されていますが、理想的には自動生成されたエンドポイントを拡張するために使用できるフィルタまたはフックがありますか?

add_action('rest_api_init', function() { 
    register_rest_route('myplugin/v1', '/author/(?P<id>\d+)', array(
     'methods' => 'GET', 
     'callback' => 'my_awesome_func', 
     'args' => array(
      'id' => array(
       'validate_callback' => 'is_numeric' 
      ), 
     ), 
     'permission_callback' => function() { 
      return current_user_can('edit_others_posts'); 
     } 
    )); 
}); 

答えて

3

あなたはURLをチェックして、ユーザーがログインしていないため、そのエンドポイントへのアクセスを取り消すrest_pre_dispatchフィルタを使用することができます。それは、クエリと意志を実行するため

add_filter('rest_pre_dispatch', function() { 
    $url = strtok($_SERVER["REQUEST_URI"],'?'); 
    if (!is_user_logged_in() && 
      !in_array($url, array (//using "in_array" because you can add mmultiple endpoints here 
         "/wp-json/cards", 
         ))){   
     return new WP_Error('not-logged-in', 'API Requests to '.$url.' are only supported for authenticated requests', array('status' => 401)); 
    } 
}); 

は、これが最善の解決策ではありません結果をフィルタリングしますが、クエリを実行する前にAPIアクセスをブロックする方法を見つけるまで、これを使用しています。

関連する問題