Cum să folosești Wordpress REST API pentru autentificarea unui utilizator?

25 sept. 2021, 02:37:55
Vizualizări: 16.3K
Voturi: 2

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.

3
Comentarii

Poți crea un endpoint personalizat, apoi în cererea ta API, include numele de utilizator și parola, apoi apelează wp_authenticate() în endpoint-ul tău pentru a valida credențialele. Dar conexiunea ar trebui să folosească întotdeauna https (protocol securizat) pentru că vei trimite parola în text simplu. Și ai încercat deja vreun cod, ai citit vreun tutorial/articol?

Sally CJ Sally CJ
25 sept. 2021 04:47:39

@SallyCJ Ce metodă aș folosi pentru a trimite datele? De asemenea, cum ar arăta funcția?

jeffinter jeffinter
25 sept. 2021 06:57:36

API-ul poate fi folosit din orice aplicație (JS, PHP, cURL, Postman, Python, etc.) prin trimiterea de cereri HTTP de bază. De exemplu, pe partea de front-end (sau non-admin) a unui site WordPress, poți folosi clientul Backbone.js sau wp.apiFetch().

Sally CJ Sally CJ
25 sept. 2021 07:50:40
Toate răspunsurile la întrebare 4
0

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 );

    }
10 ian. 2024 13:44:47
0

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ă.

25 sept. 2021 14:40:30
3

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ă.

25 sept. 2021 15:42:06
Comentarii

Nu răspunde la întrebare.

Aurovrata Aurovrata
28 dec. 2022 07:13:38

î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.

Mark Kaplun Mark Kaplun
28 dec. 2022 15:20:34

cu excepția cazului în care este cross-domain, caz în care se poate deschide o cutie nouă de probleme dacă se implementează ceva de genul acesta

Mark Kaplun Mark Kaplun
28 dec. 2022 15:45:05
0

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())
5 mar. 2025 16:50:31