web-dev-qa-db-fra.com

comment s'authentifier pour le REST API d'un plugin et d'une ligne de commande

Je veux essayer la nouvelle API REST, mais je ne suis pas habitué à ce genre de choses. En gros, je souhaite l’utiliser pour obtenir des publications personnalisées via ajax et les afficher sur l’interface du site Web (je construis un système de filtrage de produits ajax).

Je n'arrive pas à comprendre comment s'authentifier depuis PHP et comment tester l'authentification depuis la ligne de commande.

Je suppose que je n'ai pas besoin d'OAuth ici, comme pour la documentation officielle v2, mais la documentation indique que j'utiliserais le système nonce (pas de problème ici) d'un utilisateur authentifié. Évidemment, étant un script de site Web demandant des publications, aucun utilisateur humain ne s’authentifie dans mon cas, alors comment puis-je le faire via php ou js, et de manière décemment sécurisée?

4
Luca Reghellin

Les requêtes GET, comme les annonces de publication, n'ont pas besoin d'authentification, du moins vous devez obtenir des publications privées. Votre problème est que vous utilisez un itinéraire/point de terminaison qui n'existe pas.

Dans WordPress 4.4, WP REST l'infrastructure de l'API a été fusionnée, pas les points de terminaison; ils seront fusionnés dans WordPress 4.5 (comme WordPress 4.6, il semble que les points finaux ne sont toujours pas inclus dans le noyau). Vous devez définir vos propres points de terminaison ou installer le plug-in pour utiliser les points de terminaison par défaut fournis.

Par exemple (non testé, juste écrit ici):

add_action( 'rest_api_init', 'cyb_register_api_endpoints' );
function cyb_register_api_endpoints() {

    $namespace = 'myplugin/v1';

    register_rest_route( $namespace, '/posts/', array(
        'methods' => 'GET',
        'callback' => 'cyb_get_posts',
    ) );

}

function cyb_get_posts() {

    $args = array(
         // WP_Query arguments
    );

    $posts = new WP_Query( $args );

    $response = new WP_REST_Response( $posts );

    return $response;

}

Ensuite, vous pouvez obtenir les messages:

https://example.com/myplugin/v1/posts/
6
cybmeta

Il existe un WP-CLI package wp-cli/restful qui ouvre les points de terminaison restants à la CLI.

Afficher le type de publication personnalisé comme product tout en étant authentifié en tant qu'administrateur est aussi simple que:

wp post list --post-type=product --user=admin
0
jgraup