Probleme de autentificare cu REST API - rest_cannot_create

13 mai 2018, 21:08:09
Vizualizări: 27K
Voturi: 5

Folosesc REST API în WordPress. Pentru autentificare utilizez pluginul Basic Authentication (Autentificare de bază JSON)

Folosesc această cerere (atât din Postman cât și din NodeJS):

POST /wp-json/wp/v2/posts HTTP/1.1
Host: **************
Authorization: Basic *********************
Content-Type: application/json
Cache-Control: no-cache

{ "title": "test", "content": "test", "status": "private", "excerpt": "test" }

Când testez local pe serverul meu, funcționează bine, dar pe un VPS primesc următoarea eroare:

{
    "code": "rest_cannot_create",
    "message": "Ne pare rău, nu aveți permisiunea de a crea articole ca acest utilizator",
    "data": {
        "status": 401
    }
}

Știu că credențialele utilizatorului sunt corecte și utilizatorul are permisiunea de a crea articole.

Bănuiesc că header-ul de autentificare se pierde undeva înainte de a ajunge la REST API. Dar de unde ar trebui să încep debug-ul? Ce loguri să verific?

0
Toate răspunsurile la întrebare 3
1

Header-ul Authorization este de obicei eliminat de Apache.

Puteți remedia acest lucru cu .htaccess

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
9 aug. 2018 03:18:59
Comentarii

Acesta a fost greu de găsit. Mulțumesc!

Álvaro Franz Álvaro Franz
11 nov. 2024 23:40:53
3

Dacă sunteți aici pentru că ați încercat deja orice și tot nu puteți crea resurse prin intermediul WordPress Rest API, atunci permiteți-mi să vă împărtășesc ce a funcționat pentru mine.

În primul rând, să vă ofer un pic de context. Am lansat WordPress pe o instanță AWS folosind Bitnami.

Apoi am instalat WooCommerce și am activat API-ul acestuia pentru a-l folosi ca un sistem sandbox. Imediat după aceea, am încercat să creez produse folosind Postman, dar de fiecare dată primeam erori precum "woocommerce_rest_cannot_create" ("Ne pare rău, nu aveți permisiunea de a crea resurse."). Am încercat diferite metode de autentificare precum OAuth și Basic Auth, dar niciuna nu a funcționat.

Așa că m-am gândit să încerc endpoint-ul API al WordPress în loc de cel al WooCommerce (în loc de endpoint-ul WooCommerce) pentru a vedea dacă pot crea postări sau utilizatori, dar nici asta nu a funcționat. Am primit erori precum:

  • "rest_cannot_create" ("Ne pare rău, nu aveți permisiunea de a crea postări ca acest utilizator.")
  • "rest_cannot_create_user" ("Ne pare rău, nu aveți permisiunea de a crea noi utilizatori")

Iată ce a funcționat pentru mine:

  • Instalați plugin-ul Basic Auth. Puteți să-l instalați clonând repository-ul în /opt/bitnami/apps/wordpress/htdocs/wp-content/plugins și apoi activându-l din pagina de plugin-uri din panoul de administrare WordPress. Sau puteți descărca repository-ul ca fișier zip și să-l instalați manual din pagina de plugin-uri din panoul de administrare WordPress.
  • Schimbați Postman (sau orice altceva folosiți pentru a trimite cereri) să folosească Basic Auth. Folosiți credentialele unui utilizator Administrator existent.
  • Editați fișierul .htaccess disponibil în /opt/bitnami/apps/wordpress/htdocs (Acest fișier este ascuns, nu vă panicați dacă nu îl vedeți)
  • Adăugați o linie nouă sub RewriteEngine On și inserați RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}], salvați și ieșiți.
  • Editați /opt/bitnami/apps/wordpress/conf/httpd-app.conf și adăugați o linie nouă după RewriteEngine On.
  • În linia nouă inserați: RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}], salvați și ieșiți.
  • Reporniți Apache: sudo /opt/bitnami/ctlscript.sh restart apache
  • (OPȚIONAL) Instalați Application Passwords By George Stephanis

Apoi am încercat din nou din Postman și totul a funcționat perfect.

Pentru mai multe detalii, consultați: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7

6 aug. 2019 05:18:05
Comentarii

prietene, tocmai mi-ai salvat două zile

Codecraker Codecraker
23 iun. 2020 23:16:27

Mă bucur să aud asta @Codecraker :-)

Antony Fuentes Antony Fuentes
25 iun. 2020 00:11:37

Am urmat toți pașii de mai sus, dar fără succes :-(

Sohail Ahmed Sohail Ahmed
28 sept. 2020 14:13:49
0

Pentru mine, am descoperit că soluția a fost să creez și să folosesc o Parolă de Aplicație WordPress, în loc să utilizez parola normală de autentificare. O parolă obișnuită nu funcționa prin API.

Parolele de Aplicație au fost introduse în WordPress 5.6, așa că acest lucru poate fi relativ nou pentru unii: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/

21 apr. 2023 16:54:55