logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri
04/09/2025, by Ivan

JSON:API è interamente basato sulle entità. Vale a dire, non può elaborare regole di business né fare cose che non possono essere considerate come “CRUD”. La logica di business, come registrare un nuovo account, effettuare il login di un utente o richiedere una nuova password, non fa parte di JSON:API. Molte di queste funzionalità sono già fornite dal core di Drupal.

Di seguito è presentato un elenco non esaustivo di esigenze comuni e relative soluzioni.

I percorsi di interesse sono:

  • /session/token
  • /user/register
  • /user/login
  • /user/login_status
  • /user/logout

Ottenere un token di sessione

Ottieni un token

curl \
  --request GET http://drupal.d8/session/token

Un token viene restituito come testo semplice (non JSON) nel corpo della risposta.

Utilizzare i token

Oltre al token di sessione, quando effettui il login ottieni anche un csrf_token e un logout_token. Avrai bisogno del logout_token per disconnettere un utente dal sistema (vedi sotto). Il csrf_token o il token di sessione è necessario per le richieste mutabili (ad es., POST, PATCH e DELETE).

Registrazione utente

Sebbene JSON:API, così come fornito dal core, non supporti la registrazione di nuovi utenti, puoi installare il modulo JSON:API User Resources per aggiungere endpoint JSON:API relativi agli utenti, inclusi endpoint per la registrazione, il reset della password e l’aggiornamento della password.

In alternativa, puoi utilizzare il modulo REST del core. Per consentire agli utenti di registrare un account via REST, è necessario abilitare la risorsa REST user_registration (vedi l’esempio con REST UI sotto).

curl \
--header "Content-Type: application/json" \
--header "X-CSRF-Token: 57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ" \
--request POST "https://drupal.d9/user/register?_format=json" \
--data '{"name": {"value": "thename123"}, "pass": {"value": "thepass"}, "mail": {"value": "someone@example.com"}}'

Utilizza il valore del session token nell’header X-CSRF-Token. Una risposta andata a buon fine dovrebbe contenere alcuni valori dei campi utente, incluso lo UUID del nuovo utente creato:

{
   "uuid" : [ { "value" : "3e75b757-831e-4bf7-bbb6-25b8c50c7ac0" } ]
}

Nota anche che la risposta non contiene header “Set-Cookie”, anche se ai visitatori è consentito creare un account autonomamente. Quindi, se non è richiesta approvazione o conferma, puoi effettuare il login di un utente dopo la registrazione avvenuta con successo utilizzando gli stessi valori di name e pass.

Accesso utente

curl \
  --header "Content-type: application/json" \
  -c cookie.txt \
  --request POST "http://drupal.d8/user/login?_format=json" \
  --data '{"name":"admin", "pass":"admin"}'

l’opzione -c cookie.txt dice a curl di salvare un cookie. La tua risposta dovrebbe essere simile a questa:

{
   "csrf_token" : "57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ",
   "logout_token" : "zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw",
   "current_user" : {
      "roles" : [
         "authenticated",
         "administrator"
      ],
      "name" : "admin",
      "uid" : "1"
   }
}

Stato utente

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request GET "http://drupal.d8/user/login_status?_format=json"

-b cookie.txt dice a curl di inviare (non salvare) il cookie dall’ultima richiesta. Se sei loggato, questo restituirà 1 nel corpo della risposta in formato testo semplice (non JSON), altrimenti 0.

Logout utente

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request POST "http://drupal.d8/user/logout?_format=json&token=zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw"

Disconnetterà l’utente autenticato tramite cookie.txt. Usa il valore di logout_token con il parametro di query token.

Meccanismi di autenticazione

L’esempio sopra è solo uno dei molti meccanismi di autenticazione disponibili. Dovresti valutare quale meccanismo è più adatto alle tue esigenze.

Un modulo OAuth per Drupal è disponibile come simple_oauth.

Riferimenti

Consulta questi change record per maggiori informazioni:

Per l’autenticazione, puoi anche considerare l’uso di altri protocolli di autenticazione.

Se hai deciso di procedere con l’approccio “cookie” con la tua applicazione JavaScript sul front-end e Drupal sul back-end, il browser può occuparsi di tutta la gestione e memorizzazione dei cookie per te. Non dimenticare però che, se la tua app JS e il sito Drupal hanno nomi di dominio diversi, devi consentire ai browser di memorizzare i cookie di sessione degli utenti modificando il parametro SameSite dei cookie in “None”. Per farlo, modifica il file services.yml e aggiungi il seguente parametro:

parameters:
  session.storage.options:
    cookie_samesite: None

REST UI

Il modulo contrib REST UI consente di configurare le risorse del modulo REST del core. Vediamo come possiamo abilitare la registrazione utenti con questo modulo.

  1. Dopo aver installato e abilitato il modulo REST UI, vai alla pagina di configurazione in /admin/config/services/rest e abilita la risorsa “User registration”. Modifica la risorsa e abilita, ad esempio, il metodo POST, il formato JSON e il provider Cookie. Impostare la granularità su “method” ti consente anche di separare formati e provider per ciascun metodo di richiesta.
  2. Quindi, concedi agli utenti anonimi il permesso “Access POST on User registration resource” in /admin/people/permissions/module/rest .
  3. Infine, assicurati che i visitatori possano creare un account in /admin/config/people/accounts .

 

Articolo tratto dalla Documentazione di Drupal.