web-dev-qa-db-fra.com

WP-API et Basic Auth retournant 403 sur POST mais pas GET

J'utilise la dernière version de WP-API et l'authentification de base recommandée pour tester l'ajout d'une publication à WP à partir de remote.

J'ai des en-têtes d'accès ouverts du côté WP:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Content-Type");

Lorsque je soumets une demande Get à: http://sandbox.ravennainteractive.com/wp-json/wp/v2/posts , l’appel s’authentifie facilement et renvoie le Hello World Post.

Lorsque je soumets une demande de publication à la même URL. Je reçois une erreur. Voici mon appel jQuery ajax:

$('#test-post').submit(function(e){
    e.preventDefault();

    var title = $( '#title' ).val();
    var content = $( '#content_raw' ).val();

    var postData = {
        title: title,
        content: content
    }

    console.log(postData);

    $.ajax({
        method: 'POST',
        contentType: 'application/json',
        data: postData,
        url: sandboxUrl,
        beforeSend: function( xhr ) {
           xhr.setRequestHeader ('Authorization', 'Basic '+ btoa( 'apiuser' + ':' + 'PASSWORD' ));
        },
        success: function(data){
            console.log(data);
            alert('Your comment was successfully added');
        },
        error: function(data){
            console.log(data);
            alert('There was an error adding your comment');
        }
    });

    return false;
});

La réponse est Impossible de charger la ressource: le serveur a répondu avec un statut de 403 (interdit)

Tableau [0] responseText: "[{" code ":" rest_forbidden "," message ":" Vous n'êtes pas autorisé à le faire. "," Data ": {" status ": 403}}]" "

Si vous exécutez ce bloc de code, en supprimant les extras inutiles, la requête fonctionne et renvoie la publication Hello World.

 $('#test-post').submit(function(e){
    e.preventDefault();

    $.ajax({
        method: 'GET',
        url: sandboxUrl,
        beforeSend: function( xhr ) {
           xhr.setRequestHeader ('Authorization', 'Basic '+ btoa( 'apiuser' + ':' + 'PASSWORD' ));
        },
        success: function(data){
            console.log(data);
            alert('Your comment was successfully added');
        },
        error: function(data){
            console.log(data);
            alert('There was an error adding your comment');
        }
    });

    return false;
});

Comment puis-je résoudre ça?

1
TJ Sherrill

J'ai rencontré le même problème.

... l'authentification de base recommandée ...

J'ai trouvé que le problème est dans le plugin Basic Auth. Les gars de WP-API recommandent d'utiliser leur propre plugin et cette solution fonctionne pour moi.

  1. Désactiver tous les plugins d’authentification de base activés dans votre tableau de bord WordPress
  2. Sur la machine que votre WordPress est en cours d'exécution, allez dans le dossier du plugin
  3. Courir

    clone de git https://github.com/WP-API/Basic-Auth.git

  4. Allez sur votre tableau de bord d'administrateur WordPress, page des plugins. L’authentification de base JSON doit figurer dans la liste. Activez-le.

Maintenant, créer un enregistrement via la demande POST devrait fonctionner.

1
Kirill Feoktistov