Autentificare prin API WordPress și obținere detalii utilizator

19 aug. 2018, 05:33:04
Vizualizări: 17.2K
Voturi: 1

Doresc să mă autentific prin API-ul WordPress. Am încercat cu "/wp-json/wp/v2/users", dar returnează doar detaliile utilizatorului 1.

Scopul meu este să mă autentific prin API și să obțin toate informațiile profilului.

1
Toate răspunsurile la întrebare 3
0

1. Instalează și activează plugin-ul JWT Authentication for WP REST API, de asemenea instalează plugin-ul WP REST API
2. Acum poți accesa orice API implicit WordPress din aplicația mobilă sau din orice altă sursă sau prin Postman. De exemplu, accesează acest URL din aplicația ta sau prin Postman: https://example.com/wp-json/wp/v2/posts
3. Prin aplicație sau prin Postman, când te vei autentifica cu date valide (folosind REST API), vei primi înapoi un token. Pentru a te autentifica și a obține tokenul, rulează următorul URL prin Postman sau prin aplicație: https://example.com/wp-json/jwt-auth/v1/token
4. În acest fel vei obține un token așa cum este afișat în imagine Postman și autentificare JWT
Acum folosește acest token pentru a obține detaliile utilizatorului autentificat, de exemplu
5. creează o funcție în fișierul functions.php

function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}

 add_action('rest_api_init', function ()
{
  register_rest_route( 'testone', 'loggedinuser',array(
  'methods' => 'POST',
  'callback' => 'checkloggedinuser'
  ));
});


6. Acum rulează din nou acest nou URL în Postman sau în aplicație pentru a obține detaliile utilizatorului autentificat. https://example.com/wp-json/testone/loggedinuser (înlocuiește example.com cu URL-ul tău) Detalii utilizator autentificat

26 ian. 2019 23:39:43
0

Salut, am o soluție mai rapidă și mai bună pentru a obține ID-ul și altele, cum ar fi avatarul utilizatorului.

Adaugă acest cod în fișierul tău functions.php:

/*
 * Adaugă date suplimentare în plugin-ul JWT Auth
 */
function jwt_auth_function($data, $user) { 
    $data['user_role'] = $user->roles; 
    $data['user_id'] = $user->ID; 
    $data['avatar']= get_avatar_url($user->ID);
    return $data; 
} 
add_filter( 'jwt_auth_token_before_dispatch', 'jwt_auth_function', 10, 2 );

Referință: Cum să obții ID-ul utilizatorului prin API

Sper că acest lucru te-a ajutat

24 iun. 2020 16:39:59
7
-3

Rezolvat:

add_action( 'rest_api_init', 'register_api_hooks' );
function register_api_hooks() {
  register_rest_route(
    'custom-plugin', '/login/',
    array(
      'methods'  => 'POST',
      'callback' => 'login',
    )
  );
}
function login($request){
    $creds = array();
    $creds['user_login'] = $request["username"]; // Numele de utilizator
    $creds['user_password'] =  $request["password"]; // Parola
    $creds['remember'] = true; // Ține-mă minte activat
    $user = wp_signon( $creds, true ); // Autentificare WordPress

    // Verifică dacă există erori la autentificare
    if ( is_wp_error($user) )
      echo $user->get_error_message(); // Afișează mesajul de eroare

    $id = $user->ID; // ID-ul utilizatorului
    $meta = get_user_meta($id); // Obține metadatele utilizatorului

    return $meta; // Returnează metadatele
}
19 aug. 2018 06:54:35
Comentarii

Aceasta este foarte nesigură. Transmiți numele de utilizator și parola în mod deschis în URL.

Jacob Peattie Jacob Peattie
19 aug. 2018 07:23:45

De fapt, vreau să-l apelez din Android.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
19 aug. 2018 07:30:54

Nu contează. Te rog citește linkul către documentația pe care am postat-o ca un comentariu. Există metode corecte și mai sigure de a face acest lucru.

Jacob Peattie Jacob Peattie
19 aug. 2018 07:33:36

@JacobPeattie Ar fi ok să folosim POST în loc de GET? Linkul către documentația WP pe care l-ai dat a fost de fapt primul loc unde am căutat, dar nu pare să acopere nimic despre cum să faci autentificarea.

Betty Betty
30 mar. 2019 03:42:34

@Jacob, date prin metoda Post. Deci, este sigur.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
21 oct. 2019 11:27:18

Această soluție ar putea funcționa pentru cazul nostru de utilizare, și anume să permitem utilizatorilor aplicației noastre de server să se autentifice transparent cu credențialele lor Wordpress. Am trimite în esență detaliile server-to-server către WP pentru autentificare la începutul sesiunii, apoi am stoca detaliile utilizatorului în baza noastră de date. Deci facem autentificarea de bază doar o dată pe sesiune printr-o conexiune de încredere, astfel evitând problemele de securitate, dispozitivul client trimite credențialele o singură dată. Ca măsură suplimentară de securitate, vom cere o cheie secretă partajată fie în header, fie ca parte a cererii

james-geldart james-geldart
1 oct. 2021 15:49:16

O soluție mai bună (pentru cazul nostru de utilizare) ar putea fi folosirea wp_authenticate în loc de wp_signon, deoarece astfel nu va crea o sesiune de autentificare care teoretic ar putea fi deturnată

james-geldart james-geldart
1 oct. 2021 15:55:44
Arată celelalte 2 comentarii