Cum să folosești Wordpress REST API pentru autentificarea unui utilizator?
Aș dori să folosesc API-ul REST pentru a primi un nume de utilizator și parolă trimise într-o cerere, să le folosesc în wp_authenticate() și apoi să trimit înapoi un răspuns dacă credentialele au fost corecte. Cum aș putea face acest lucru.

Adaugă cod în functions.php Și trimite date către ruta
add_action( 'rest_api_init', 'register_api_hooks' );
// Puncte de acces API personalizate pentru WP-REST API
function register_api_hooks() {
register_rest_route(
'custom-plugin', '/login/',
array(
'methods' => 'POST',
'callback' => 'login',
)
);
}
function login() {
// Logica ta aici.
return wp_signon( array(
'user_login' => $_POST['user_login'],
'user_password' => $_POST['user_password'],
'remember' => $_POST['remember']
), false );
}

Există 3 metode de autentificare a unui utilizator folosind o cerere către un endpoint API REST,
1- folosind cookie-uri, care este metoda prin care WordPress ține evidența utilizatorilor autentificați în cererile POST. Transmiți detaliile de autentificare în cererea ta REST, folosești funcția wp_signon()
funcția pentru a conecta utilizatorul, iar dacă este reușit, setezi cookie-ul de autentificare folosind funcția wp_set_auth_cookie() funcția,
$creds = array(
'user_login' => 'exemplu',
'user_password' => 'parolaînclar',
'remember' => true
);
$user = wp_signon( $creds, false );
if ( is_wp_error( $user ) ) {
$msg = $user->get_error_message();
}else{
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID ); // Setează detaliile utilizatorului curent
wp_set_auth_cookie ( $user->ID ); // Setează detaliile de autentificare în cookie
$msg = "Autentificare reușită";
}
Puteți găsi o discuție pe acest forum WordPress.
2- Folosind cereri de Autentificare Basic către propriul server
ideea aici este ca pentru fiecare cerere REST pe care o faci către serverul tău, să transmiți credențialele utilizatorului (de fiecare dată) printr-o conexiune SSL. Grupul API WordPress oferă un plugin în depozitul lor GitHub pentru a face asta, care îți permite să codezi credențialele utilizatorului și să le decodifici pe cealaltă parte pentru a le autentifica, de exemplu, pentru a șterge o postare a utilizatorului de pe server,
let user='...', pw='...';
jQuery.ajax({
url: 'http://domeniul-tau/wp-json/wp/v2/posts/50',
method: 'DELETE',
crossDomain: true,
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( user + ':' + pw ) );
},
success: function( data, txtStatus, xhr ) {
console.log( data );
console.log( xhr.status );
}
});
Pentru mai multe detalii, consultă acest tutorial detaliat
3- folosind o autentificare terță parte precum OAuth deschis.
Aceasta este metoda folosită de Google și permite site-ului tău să identifice utilizatorii pe baza credențialelor lor de autentificare Google. WordPress.com folosește de asemenea această metodă pentru autentificarea serviciului său de bloguri.
Ideea este ca utilizatorii tăi să se autentifice pe un server care îi identifică (folosind cookie-uri în browserul lor).
Odată autentificați, pagina ta (js reactiv) face o cerere către autoritatea/serverul de autentificare care, dacă este confirmată de utilizator, returnează un token de acces folosit pentru autentificarea cererilor REST ulterioare.
Poți folosi un serviciu de autentificare terță parte, precum Google, caz în care poți urmări acest tutorial YouTube care te ghidează prin bazele creării unui proiect Google API pentru a permite aplicației tale să facă cereri de autentificare.
Alternativ, poți converti serverul tău WordPress într-un server OAuth folosind un plugin existent precum WP-OAuth Server, și documentația sa extinsă.

Cea mai bună metodă pentru a "autentifica" un utilizator pe un site este utilizarea formularului de login WordPress. După cum sugerează și alte comentarii și răspunsuri, a face acest lucru în modul în care sugerează titlul întrebării necesită o anumită reinventare a roții. Formularul de login, pe lângă faptul că efectuează autentificarea propriu-zisă, oferă și feedback atunci când autentificarea eșuează și oferă un flux pentru resetarea parolei.
Chiar dacă optați pentru o experiență WordPress complet "headless", ar trebui să fiți 100% siguri că efortul de a reinventa formularul de login merită.
Acum, dacă intenționați să autentificați utilizatorul de pe un domeniu diferit, pur și simplu nu va funcționa, deoarece cookie-urile vor fi setate doar pe domeniul site-ului, din câte îmi amintesc.
Astfel, singurul caz de utilizare valid este comunicarea server-to-server, în care trebuie să stocați cookie-urile primite din cererea de "login" și să le reutilizați în cererile ulterioare. Dar acest lucru implică stocarea numelui de utilizator și a parolei pe serverul dvs., caz în care utilizarea parolelor de aplicație ar putea fi de fapt o soluție mai bună.

întrebări proaste primesc răspunsuri nu prea bune. În retrospectivă, probabil că OP vrea să știe dacă un utilizator este autentificat, dar trimiterea unei cereri REST doar pentru asta este puțin probabil să fie o metodă optimă de a face acest lucru.

Parolele de aplicație WordPress (introduse în WordPress 5.6) permit accesul la API prin intermediul Autentificării HTTP Basic. Folosești numele de utilizator WordPress și o parolă de aplicație generată (găsită în profilul tău de utilizator) pentru a autentifica cererile.
Pași exacti
Autentifică-te în Admin WordPress: Accesează panoul de administrare WordPress (de exemplu, https://sitele-tau-wordpress.com/wp-admin).
Navighează la Profilul Tău: În meniul din stânga, dă clic pe Utilizatori și apoi pe Profil (sau Profilul Tău).
Găsește Secțiunea Parole de Aplicație: Derulează în jos până când vezi secțiunea Parole de Aplicație.
Generează o Nouă Parolă de Aplicație: Introdu un nume descriptiv pentru noua aplicație (de exemplu, "Aplicație Python"). Dă clic pe butonul Adaugă Parolă de Aplicație Nouă. Important: Copiază imediat parola generată, deoarece nu va mai fi afișată din nou.
Folosește Credențialele pentru Cereri API: Combină numele tău de utilizator WordPress și parola de aplicație generată pentru a te autentifica prin Autentificarea HTTP Basic. Biblioteca requests cu HTTPBasicAuth va codifica automat aceste credențiale în Base64.
Exemplu de cod Python:
import requests
from requests.auth import HTTPBasicAuth
# Înlocuiește cu URL-ul site-ului tău WordPress, numele de utilizator și parola de aplicație generată
site_url = "https://sitele-tau-wordpress.com"
username = "numele_tau_de_utilizator"
app_password = "parola_ta_de_aplicație"
# Exemplu: GET postări
get_url = f"{site_url}/wp-json/wp/v2/posts"
response = requests.get(get_url, auth=HTTPBasicAuth(username, app_password))
print("Răspuns GET:", response.json())
# Exemplu: POST o postare nouă cu date
post_url = f"{site_url}/wp-json/wp/v2/posts"
data = {
"title": "Salut Lume",
"content": "Această postare a fost creată prin intermediul API-ului REST cu o parolă de aplicație.",
"status": "publish"
}
response = requests.post(post_url, json=data, auth=HTTPBasicAuth(username, app_password))
print("Răspuns POST:", response.json())
