Come utilizzare l'API REST di WordPress per il login di un utente?
Vorrei utilizzare l'API REST per ricevere username e password da una richiesta e usarli in wp_authenticate() per poi restituire se le credenziali erano corrette. Come posso farlo.

Aggiungi il codice a functions.php E invia i dati alla route
add_action( 'rest_api_init', 'register_api_hooks' );
// Endpoint API personalizzati per WP-REST API
function register_api_hooks() {
register_rest_route(
'custom-plugin', '/login/',
array(
'methods' => 'POST',
'callback' => 'login',
)
);
}
function login() {
// La tua logica va qui.
return wp_signon( array(
'user_login' => $_POST['user_login'],
'user_password' => $_POST['user_password'],
'remember' => $_POST['remember']
), false );
}

Ci sono 3 modi per autenticare un utente utilizzando una richiesta a un endpoint API REST:
1- Utilizzando i cookie, che è il modo in cui WordPress tiene traccia degli utenti autenticati nelle richieste POST. Passi i dettagli di autenticazione nella tua richiesta REST, usi la wp_signon()
funzione per effettuare l'accesso dell'utente e, se ha successo, imposti il cookie di autenticazione utilizzando la funzione wp_set_auth_cookie() funzione,
$creds = array(
'user_login' => 'example',
'user_password' => 'plaintextpw',
'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 ); // Imposta i dettagli dell'utente corrente
wp_set_auth_cookie ( $user->ID ); // Imposta i dettagli di autenticazione nel cookie
$msg = "Accesso effettuato con successo";
}
Puoi trovare una discussione su questo thread del forum WordPress.
2- Utilizzando richieste di autenticazione Basic al tuo server
L'idea qui è che per ogni richiesta REST che invii al tuo server, passi le credenziali dell'utente (ogni volta) su una connessione SSL. Il gruppo API di WordPress fornisce un plugin sul loro repository GitHub per farlo al posto tuo, che ti permette di codificare le credenziali dell'utente e decodificarle dall'altra parte per autenticarlo. Ad esempio, per eliminare un post dell'utente sul server,
let user='...', pw='...';
jQuery.ajax({
url: 'http://your-domain/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 );
}
});
Per maggiori dettagli, consulta questo tutorial approfondito.
3- Utilizzando un'autenticazione di terze parti come OAuth open.
Questo è ciò che utilizza Google e permette al tuo sito di identificare gli utenti in base alle loro credenziali di accesso Google. Anche WordPress.com utilizza questo metodo per l'autenticazione del suo servizio di blog.
L'idea è che i tuoi utenti accedano a un server che li identifica (utilizzando i cookie sul loro browser).
Una volta autenticati, la tua pagina (js reattivo) effettua una richiesta all'autorità/server di autenticazione che, se confermata dall'utente, restituisce un token di accesso utilizzato per autenticare le richieste REST successive.
Potresti utilizzare un servizio di autenticazione di terze parti, come Google, nel qual caso puoi seguire questo tutorial su YouTube che ti guida attraverso le basi per impostare un progetto API Google per permettere alla tua applicazione di effettuare richieste di autenticazione.
In alternativa, potresti convertire il tuo server WordPress in un server OAuth utilizzando un plugin esistente come WP-OAuth Server, e la sua ampia documentazione.

Il modo migliore per "fare il login" di un utente su un sito è utilizzare il modulo di login di WordPress. Come suggeriscono altri commenti e risposte, farlo nel modo implicito dal titolo della domanda richiederebbe reinventare la ruota. Il modulo di login, oltre a effettuare l'effettivo accesso, fornisce feedback quando il login fallisce e offre un flusso per reimpostare la password.
Anche se stai puntando a un'esperienza WordPress completamente "headless", dovresti essere sicuro al 100% che lo sforzo di reinventare il modulo di login ne valga la pena.
Ora, se intendi autenticare l'utente da un dominio diverso, semplicemente non funzionerà poiché i cookie verranno impostati solo sul dominio del sito, se non ricordo male.
Quindi l'unico caso d'uso valido è la comunicazione server-to-server in cui è necessario memorizzare i cookie ricevuti dalla richiesta di "login" e riutilizzarli nelle richieste successive, ma ciò implica che memorizzi nome utente e password sul tuo server, nel qual caso utilizzare password applicative potrebbe essere effettivamente una soluzione migliore.

alle domande mal poste si ottengono risposte non ottimali. A posteriori, probabilmente l'OP vuole sapere se un utente è loggato, ma inviare una richiesta REST solo per questo difficilmente sarà il modo migliore per farlo.

Le password dell'applicazione WordPress (introdotte in WordPress 5.6) consentono l'accesso all'API tramite autenticazione HTTP Basic. Utilizzi il tuo nome utente WordPress e una password dell'applicazione generata (trovata nel tuo profilo utente) per autenticare le richieste.
Passaggi Esatti
Accedi all'Admin di WordPress: Accedi alla dashboard di amministrazione di WordPress (es. https://tuo-sito-wordpress.com/wp-admin).
Vai al Tuo Profilo: Nel menu a sinistra, clicca su Utenti e poi su Profilo (o Il Tuo Profilo).
Trova la Sezione Password dell'Applicazione: Scorri verso il basso fino a vedere la sezione Password dell'Applicazione.
Genera una Nuova Password dell'Applicazione: Inserisci un nome descrittivo per la nuova applicazione (es. "App Python"). Clicca sul pulsante Aggiungi Nuova Password dell'Applicazione. Importante: Copia immediatamente la password generata, poiché non verrà mostrata di nuovo.
Utilizza le Credenziali per le Richieste API: Combina il tuo nome utente WordPress e la password dell'applicazione generata per autenticarti tramite HTTP Basic Authentication. La libreria requests codificherà automaticamente queste credenziali in Base64 con HTTPBasicAuth.
Esempio di codice Python:
import requests
from requests.auth import HTTPBasicAuth
# Sostituisci con l'URL del tuo sito WordPress, nome utente e password dell'applicazione generata
site_url = "https://tuo-sito-wordpress.com"
username = "tuo_nome_utente"
app_password = "tua_password_applicazione"
# Esempio: GET dei post
get_url = f"{site_url}/wp-json/wp/v2/posts"
response = requests.get(get_url, auth=HTTPBasicAuth(username, app_password))
print("Risposta GET:", response.json())
# Esempio: POST di un nuovo post con dati
post_url = f"{site_url}/wp-json/wp/v2/posts"
data = {
"title": "Hello World",
"content": "Questo post è stato creato via REST API con una password dell'applicazione.",
"status": "publish"
}
response = requests.post(post_url, json=data, auth=HTTPBasicAuth(username, app_password))
print("Risposta POST:", response.json())
