Utenti nei progetti Firebase

L'oggetto utente Firebase rappresenta un account utente che si è registrato per un'app nel tuo progetto. Le app in genere hanno molti utenti registrati e ogni app in un progetto condivide un database utenti.

Le istanze utente sono indipendenti dalle istanze di autenticazione Firebase, quindi puoi avere più riferimenti a utenti diversi nello stesso contesto e chiamare comunque uno qualsiasi dei loro metodi.

Proprietà utente

Gli utenti Firebase hanno un insieme fisso di proprietà di base, un ID univoco, un indirizzo email principale, un nome e un URL di foto, archiviate nel database utenti del progetto, che può essere aggiornato dall'utente ( iOS , Android , web ). Non è possibile aggiungere direttamente altre proprietà all'oggetto utente; puoi invece archiviare le proprietà aggiuntive in qualsiasi altro servizio di archiviazione, come Google Cloud Firestore.

La prima volta che un utente si registra alla tua app, i dati del profilo dell'utente vengono popolati utilizzando le informazioni disponibili:

  • Se l'utente si è registrato con un indirizzo e-mail e una password, viene popolata solo la proprietà dell'indirizzo e-mail principale
  • Se l'utente si è registrato con un provider di identità federato, come Google o Facebook, le informazioni sull'account rese disponibili dal provider vengono utilizzate per popolare il profilo dell'utente
  • Se l'utente si è registrato con il tuo sistema di autenticazione personalizzato, devi aggiungere esplicitamente le informazioni desiderate al profilo dell'utente

Una volta creato un account utente, puoi ricaricare le informazioni dell'utente per incorporare eventuali modifiche che l'utente potrebbe aver apportato su un altro dispositivo.

Provider di accesso

Puoi far accedere gli utenti alle tue app utilizzando diversi metodi: indirizzo email e password, provider di identità federati e il tuo sistema di autenticazione personalizzato. Puoi associare più metodi di accesso a un utente: ad esempio, un utente può accedere allo stesso account utilizzando un indirizzo email e una password oppure utilizzando Accedi con Google.

Le istanze utente tengono traccia di ogni provider collegato all'utente. Ciò ti consente di aggiornare le proprietà del profilo vuoto utilizzando le informazioni fornite da un provider. Vedere Gestione degli utenti ( iOS , Android , web ).

L'utente corrente

Quando un utente si registra o accede, diventa l'utente corrente dell'istanza di autenticazione. L'istanza mantiene lo stato dell'utente, in modo che l'aggiornamento della pagina (in un browser) o il riavvio dell'applicazione non perdano le informazioni dell'utente.

Quando l'utente si disconnette, l'istanza Auth smette di mantenere un riferimento all'oggetto utente e non mantiene più il proprio stato; non esiste alcun utente corrente. Tuttavia, l'istanza utente continua a essere completamente funzionale: se mantieni un riferimento ad essa, puoi comunque accedere e aggiornare i dati dell'utente.

Il ciclo di vita dell'utente

Il modo consigliato per tenere traccia dello stato corrente dell'istanza Auth è utilizzare gli ascoltatori (chiamati anche "osservatori" in JavaScript). Un ascoltatore Auth viene avvisato ogni volta che accade qualcosa di rilevante all'oggetto Auth. Vedere Gestione degli utenti ( iOS , Android , web ).

Un ascoltatore Auth riceve una notifica nelle seguenti situazioni:

  • L'oggetto Auth termina l'inizializzazione e un utente ha già effettuato l'accesso da una sessione precedente oppure è stato reindirizzato dal flusso di accesso di un provider di identità
  • Un utente accede (viene impostato l'utente corrente)
  • Un utente si disconnette (l'utente corrente diventa nullo)
  • Il token di accesso dell'utente corrente viene aggiornato. Questo caso può verificarsi nelle seguenti condizioni:
    • Il token di accesso scade: questa è una situazione comune. Il token di aggiornamento viene utilizzato per ottenere un nuovo set di token valido.
    • L'utente cambia la propria password: Firebase emette nuovi token di accesso e aggiornamento e rende scaduti i vecchi token. Questo fa scadere automaticamente il token dell'utente e/o disconnette l'utente su ogni dispositivo, per motivi di sicurezza.
    • L'utente si autentica nuovamente: alcune azioni richiedono che le credenziali dell'utente siano state recentemente rilasciate; tali azioni includono l'eliminazione di un account, l'impostazione di un indirizzo email principale e la modifica di una password. Invece di disconnettere l'utente e quindi accedervi nuovamente, ottenere nuove credenziali dall'utente e passare le nuove credenziali al metodo di riautenticazione dell'oggetto utente.

Self-service dell'utente

Per impostazione predefinita, Firebase consente agli utenti di registrarsi ed eliminare i propri account senza intervento amministrativo. In molte circostanze, ciò consente agli utenti finali di scoprire la tua applicazione o servizio e di eseguire l'onboarding (o l'offboard) con il minimo attrito.

Esistono situazioni, tuttavia, in cui desideri che gli utenti vengano creati manualmente o a livello di codice da un amministratore, utilizzando Admin SDK o la console Firebase. In questi casi, puoi disabilitare le azioni dell'utente dalla pagina Impostazioni di autenticazione Firebase , che impedisce la creazione e l'eliminazione di account da parte degli utenti finali. Se utilizzi multi-tenant, dovrai effettuare una richiesta HTTP per disabilitare queste funzionalità in base al tenant.

Se un utente finale tenta di creare o eliminare un account all'interno del tuo sistema, il servizio Firebase restituirà un codice di errore: auth/admin-restricted-operation per le chiamate API Web o ERROR_ADMIN_RESTRICTED_OPERATION per Android e iOS. Dovresti gestire con garbo l'errore sul tuo front-end chiedendo all'utente di intraprendere le azioni appropriate per il tuo servizio.

Token di autenticazione

Quando esegui l'autenticazione con Firebase, potresti riscontrare tre tipi di token di autenticazione:

Token ID Firebase Creato da Firebase quando un utente accede a un'app. Questi token sono JWT firmati che identificano in modo sicuro un utente in un progetto Firebase. Questi token contengono informazioni di base sul profilo di un utente, inclusa la stringa ID dell'utente, che è univoca per il progetto Firebase. Poiché è possibile verificare l'integrità dei token ID , puoi inviarli a un server backend per identificare l'utente attualmente connesso.
Token del fornitore di identità Creato da provider di identità federati, come Google e Facebook. Questi token possono avere formati diversi, ma spesso sono token di accesso OAuth 2.0. Le app utilizzano questi token per verificare che gli utenti si siano autenticati correttamente con il provider di identità e quindi convertirli in credenziali utilizzabili dai servizi Firebase.
Token personalizzati Firebase Creato dal tuo sistema di autenticazione personalizzato per consentire agli utenti di accedere a un'app utilizzando il tuo sistema di autenticazione. I token personalizzati sono JWT firmati utilizzando la chiave privata di un account di servizio . Le app utilizzano questi token in modo molto simile a quelli restituiti dai provider di identità federati.

Indirizzi email verificati

Firebase considera un'e-mail verificata se soddisfa due condizioni:

  1. L'utente completa il flusso di verifica di Firebase
  2. L'e-mail viene verificata da un provider di identità attendibile, o IdP in breve.

Gli IdP che verificano l'e-mail una volta, ma poi consentono agli utenti di modificare gli indirizzi e-mail senza richiedere una nuova verifica, non sono attendibili. Gli IdP che possiedono il dominio o che richiedono sempre la verifica sono considerati attendibili.

Fornitori fidati:

  • Google (per indirizzi @gmail.com)
  • Yahoo (per indirizzi @yahoo.com)
  • Microsoft (per gli indirizzi @outlook.com e @hotmail.com)
  • Apple (sempre verificato, perché gli account sono sempre verificati e autenticati a più fattori)

Fornitori non affidabili:

  • Facebook
  • Twitter
  • GitHub
  • Google, Yahoo e Microsoft per i domini non emessi da tale provider di identità
  • E-mail/Password senza verifica e-mail

In alcune situazioni, Firebase collegherà automaticamente gli account quando un utente accede con provider diversi utilizzando lo stesso indirizzo email. Tuttavia, ciò può accadere solo quando vengono soddisfatti criteri specifici. Per capire il motivo, si consideri la seguente situazione: un utente accede utilizzando Google con un account @gmail.com e un utente malintenzionato crea un account utilizzando lo stesso indirizzo @gmail.com, ma accedendo tramite Facebook. Se questi due account fossero collegati automaticamente, l'autore malintenzionato potrebbe accedere all'account dell'utente.

I seguenti casi descrivono quando colleghiamo automaticamente gli account e quando lanciamo un errore che richiede l'intervento dell'utente o dello sviluppatore:

  • L'utente accede con un provider non attendibile, quindi accede con un altro provider non attendibile con lo stesso indirizzo email (ad esempio, Facebook seguito da GitHub). Ciò genera un errore che richiede il collegamento dell'account.
  • L'utente accede con un provider attendibile, quindi accede con un provider non attendibile con lo stesso indirizzo email (ad esempio, Google seguito da Facebook). Ciò genera un errore che richiede il collegamento dell'account.
  • L'utente accede con un provider non attendibile, quindi accede con un provider attendibile con lo stesso indirizzo email (ad esempio Facebook seguito da Google). Il provider attendibile sovrascrive il provider non attendibile. Se l'utente tenta di accedere nuovamente con Facebook, si verificherà un errore che richiede il collegamento dell'account.
  • L'utente accede con un provider attendibile, quindi accede con un altro provider attendibile con lo stesso indirizzo email (ad esempio, Apple seguito da Google). Entrambi i provider verranno collegati senza errori.

Puoi impostare manualmente un'e-mail come verificata utilizzando Admin SDK, ma ti consigliamo di farlo solo se sai che l'utente è realmente il proprietario dell'e-mail.