Trigger di Firebase Authentication
Le funzioni Cloud Run possono essere attivate da eventi di Firebase Authentication nello stesso progettoGoogle Cloud della funzione. Questi eventi includono la creazione e l'eliminazione di utenti. Ad esempio, potresti inviare un'email di benvenuto a un utente che ha appena creato un account nella tua app.
Tipi di evento
Firebase Authentication può attivare funzioni in risposta agli eventi create
e
delete
utente.
Tipo di evento | Trigger |
---|---|
providers/firebase.auth/eventTypes/user.create |
Si attiva quando viene creato un account utente. |
providers/firebase.auth/eventTypes/user.delete |
Si attiva quando un account utente viene eliminato. |
Creazione utente
Gli account Firebase attivano eventi di creazione utente per Cloud Run Functions quando:
Un utente crea un account email e una password.
Un utente esegue l'accesso per la prima volta utilizzando un provider di identità federato.
Lo sviluppatore crea un account utilizzando l'SDK Firebase Admin.
Un utente accede per la prima volta a una nuova sessione di autenticazione anonima.
Eliminazione utente
Puoi anche configurare una funzione da attivare in caso di eliminazione dell'utente.
Struttura dell'evento
I dati sugli eventi vengono forniti come oggetto UserRecord
.
Di seguito è riportato un esempio di evento di creazione di un account basato su password:
{ "email": "me@example.com", "metadata": { "createdAt": "2018-10-19T19:29:16Z" }, "uid": "XXXXX" }
Alcune proprietà di questo oggetto vengono definite solo quando vengono utilizzati determinati
metodi di autenticazione. Ad esempio, gli eventi account basato su password
definiscono una proprietà email
contenente l'indirizzo email dell'utente. La proprietà uid
(che contiene un ID utente univoco per il tuo progetto) è sempre definita.
Codice di esempio
Node.js
Python
Go
Java
C#
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using Google.Events.Protobuf.Firebase.Auth.V1; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; namespace FirebaseAuth; public class Function : ICloudEventFunction<AuthEventData> { private readonly ILogger _logger; public Function(ILogger<Function> logger) => _logger = logger; public Task HandleAsync(CloudEvent cloudEvent, AuthEventData data, CancellationToken cancellationToken) { _logger.LogInformation("Function triggered by change to user: {uid}", data.Uid); if (data.Metadata is UserMetadata metadata) { _logger.LogInformation("User created at: {created:s}", metadata.CreateTime.ToDateTimeOffset()); } if (!string.IsNullOrEmpty(data.Email)) { _logger.LogInformation("Email: {email}", data.Email); } // In this example, we don't need to perform any asynchronous operations, so the // method doesn't need to be declared async. return Task.CompletedTask; } }
Ruby
PHP
use Google\CloudFunctions\CloudEvent; function firebaseAuth(CloudEvent $cloudevent) { $log = fopen(getenv('LOGGER_OUTPUT') ?: 'php://stderr', 'wb'); $data = $cloudevent->getData(); fwrite( $log, 'Function triggered by change to user: ' . $data['uid'] . PHP_EOL ); fwrite($log, 'Created at: ' . $data['metadata']['createTime'] . PHP_EOL); if (isset($data['email'])) { fwrite($log, 'Email: ' . $data['email'] . PHP_EOL); } }
Deployment della funzione
Per eseguire il deployment della funzione, devi specificare il tipo di evento e il progetto per cui hai configurato Firebase Auth. Nella Google Cloud console, è presente un unico campo per Tipo di evento, in quanto si presume che il progetto sia lo stesso di quello che contiene la funzione.
Nella riga di comando, invece, devi utilizzare stringhe specifiche per specificare questi due parametri. Il seguente comando gcloud
esegue il deployment di una funzione attivata
dagli eventi utente create
:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --entry-point ENTRY_POINT \ --trigger-event providers/firebase.auth/eventTypes/user.create \ --trigger-resource YOUR_PROJECT_ID \ --runtime RUNTIME
Argomento | Descrizione |
---|---|
FUNCTION_NAME |
Il nome registrato delle funzioni Cloud Run che stai eseguendo il deployment.
Può essere il nome di una funzione nel tuo
codice sorgente o una stringa arbitraria. Se FUNCTION_NAME è una
stringa arbitraria, devi includere il
flag --entry-point .
|
--entry-point ENTRY_POINT |
Il nome di una funzione o di una classe nel codice sorgente. Facoltativo, a meno che
non hai utilizzato FUNCTION_NAME
per specificare la
funzione nel codice sorgente da eseguire durante il deployment. In questo
caso, devi utilizzare --entry-point per fornire il nome della
funzione eseguibile.
|
--trigger-event NAME |
Il nome del tipo di evento che attiva la funzione. In questo caso, deve essere uno dei valori create o delete, come elencato sopra. |
--trigger-resource NAME |
L'ID progetto (in questo esempio, YOUR_PROJECT_ID )
per il progetto che contiene la funzione e Firebase Authentication.
|
--runtime RUNTIME |
Il nome del runtime che stai utilizzando. Per un elenco completo, consulta il
riferimento gcloud .
|