Probleme de autentificare cu REST API - rest_cannot_create
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?

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țiRewriteRule .* - [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

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/
