Come effettuare il login via API di WordPress e ottenere i dettagli dell'utente?

19 ago 2018, 05:33:04
Visualizzazioni: 17.2K
Voti: 1

Voglio effettuare il login tramite l'API di WordPress. Ho provato con "/wp-json/wp/v2/users" ma restituisce solo i dettagli dell'utente 1.

Il mio obiettivo è fare il login via API e recuperare tutte le informazioni del profilo.

1
Tutte le risposte alla domanda 3
0

1. Installa e attiva il plugin JWT Authentication for WP REST API, inoltre installa il plugin WP REST API
2. Ora puoi eseguire qualsiasi API predefinita di WordPress dall'app mobile o da qualsiasi altra fonte o tramite Postman. Ad esempio, chiama questo URL dalla tua app o da Postman: https://example.com/wp-json/wp/v2/posts
3. Tramite l'app o Postman, quando effettuerai il login con credenziali valide (utilizzando la REST API) riceverai un token. Per effettuare il login e ottenere il token, esegui il seguente URL tramite Postman o l'app: https://example.com/wp-json/jwt-auth/v1/token
4. In questo modo otterrai un token come mostrato nell'immagine Postman e autenticazione JWT
Ora utilizza questo token per ottenere i dettagli dell'utente loggato, ad esempio
5. crea una funzione in function.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. Ora esegui nuovamente questo nuovo URL in Postman o nell'app per ottenere i dettagli dell'utente loggato. https://example.com/wp-json/testone/loggedinuser (sostituisci example.com con il tuo URL) Dettagli utente loggato

26 gen 2019 23:39:43
0

Ciao, ho una soluzione più veloce e migliore per ottenere l'ID e altri dati come l'avatar dell'utente.

Aggiungi semplicemente questo al tuo file functions.php:

/*
 * Aggiunge dati aggiuntivi al plugin 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 );

Riferimento: Come ottenere l'ID utente via API

Spero che questo ti sia utile

24 giu 2020 16:39:59
7
-3

Risolto:

add_action( 'rest_api_init', 'registra_hooks_api' );
function registra_hooks_api() {
  register_rest_route(
    'custom-plugin', '/login/',
    array(
      'methods'  => 'POST',
      'callback' => 'login',
    )
  );
}
function login($request){
    $creds = array();
    $creds['user_login'] = $request["username"]; // Nome utente dall'input
    $creds['user_password'] =  $request["password"]; // Password dall'input
    $creds['remember'] = true; // Mantieni l'accesso
    $user = wp_signon( $creds, true ); // Effettua il login


    if ( is_wp_error($user) )
      echo $user->get_error_message(); // Mostra errori di login

    $id = $user->ID; // ID utente
    $meta = get_user_meta($id); // Ottieni metadati utente

    return $meta; // Restituisci metadati
}
19 ago 2018 06:54:35
Commenti

Questo è molto insicuro. Stai inviando nome utente e password in chiaro nell'URL.

Jacob Peattie Jacob Peattie
19 ago 2018 07:23:45

In realtà, voglio chiamarlo da Android.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
19 ago 2018 07:30:54

Non importa. Per favore leggi il link alla documentazione che ho postato come commento. Ci sono modi corretti e più sicuri per farlo.

Jacob Peattie Jacob Peattie
19 ago 2018 07:33:36

@JacobPeattie Sarebbe accettabile utilizzare POST invece di GET? Il link alla documentazione di WP che hai fornito è stato in realtà il primo posto in cui sono andato, ma non sembra coprire nulla su come effettuare il login.

Betty Betty
30 mar 2019 03:42:34

@Jacob, Dati con metodo Post. Quindi, è sicuro.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
21 ott 2019 11:27:18

Questo potrebbe funzionare per il nostro caso d'uso, che è avere gli utenti della nostra applicazione server che accedono in modo trasparente con le loro credenziali Wordpress. In pratica passeremmo i dettagli da server a server a WP per autenticare all'inizio della sessione, e poi memorizzeremmo i dettagli dell'utente nel nostro database. Quindi facciamo l'autenticazione di base solo una volta per sessione tramite una connessione sicura, evitando così i problemi di sicurezza, il dispositivo client invia le credenziali solo una volta. Come ulteriore misura di sicurezza, richiederemo una chiave segreta condivisa nell'header o come parte della richiesta

james-geldart james-geldart
1 ott 2021 15:49:16

In realtà, una soluzione migliore (per il nostro caso d'uso) potrebbe essere utilizzare wp_authenticate invece di wp_signon perché in questo modo non verrà creata una sessione di login che in teoria potrebbe essere dirottata

james-geldart james-geldart
1 ott 2021 15:55:44
Mostra i restanti 2 commenti