Acionadores do Firebase Authentication
As funções do Cloud Run podem ser acionadas por eventos do Firebase Authentication no mesmo Google Cloud projeto que a função. Estes eventos incluem a criação e a eliminação de utilizadores. Por exemplo, pode enviar um email de boas-vindas a um utilizador que acabou de criar uma conta na sua app.
Tipos de eventos
A Firebase Authentication pode acionar funções em resposta a eventos de create
e delete
do utilizador.
Tipo de evento | Acionador |
---|---|
providers/firebase.auth/eventTypes/user.create |
Acionado quando é criada uma conta de utilizador. |
providers/firebase.auth/eventTypes/user.delete |
Acionado quando uma conta de utilizador é eliminada. |
Criação de utilizador
As contas do Firebase acionam eventos de criação de utilizadores para funções do Cloud Run quando:
Um utilizador cria uma conta de email e uma palavra-passe.
Um utilizador inicia sessão pela primeira vez através de um fornecedor de identidade federada.
O programador cria uma conta através do SDK de administração do Firebase.
Um utilizador inicia sessão numa nova sessão de autenticação anónima pela primeira vez.
Eliminação de utilizador
Também pode configurar uma função para ser acionada quando um utilizador é eliminado.
Estrutura de eventos
Os dados de eventos são fornecidos como um objeto UserRecord
.
Segue-se um exemplo de um evento de criação de uma conta baseada em palavra-passe:
{ "email": "me@example.com", "metadata": { "createdAt": "2018-10-19T19:29:16Z" }, "uid": "XXXXX" }
Algumas propriedades deste objeto só são definidas quando são usados determinados métodos de autenticação. Por exemplo, os eventos de conta baseada em palavra-passe
definem uma propriedade email
que contém o endereço de email do utilizador. A propriedade uid
(que contém um ID do utilizador exclusivo do seu projeto) está sempre definida.
Exemplo de código
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); } }
Implementar a sua função
Para implementar a sua função, tem de especificar o tipo de evento e o projeto para o qual tem o Firebase Auth configurado. Na Google Cloud consola, existe um único campo para Tipo de evento, uma vez que se assume que o projeto é o mesmo que o projeto que contém a sua função.
No entanto, na linha de comandos, tem de usar strings específicas para especificar estes dois parâmetros. O comando gcloud
seguinte implementa uma função que é acionada por eventos create
do utilizador:
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
Argumento | Descrição |
---|---|
FUNCTION_NAME |
O nome registado das funções do Cloud Run que está a implementar.
Pode ser o nome de uma função no seu código-fonte ou uma string arbitrária. Se FUNCTION_NAME for uma string arbitrária, tem de incluir a flag --entry-point .
|
--entry-point ENTRY_POINT |
O nome de uma função ou classe no seu código-fonte. Opcional, a menos que não tenha usado FUNCTION_NAME
para especificar a função no código fonte a ser executada durante a implementação. Nesse caso, tem de usar --entry-point para indicar o nome da função executável.
|
--trigger-event NAME |
O nome do tipo de evento que aciona a função. Neste caso, deve ser uma das opções criar ou eliminar, conforme indicado acima. |
--trigger-resource NAME |
O ID do projeto (neste exemplo, YOUR_PROJECT_ID )
para o projeto que contém a sua função e a autenticação do Firebase.
|
--runtime RUNTIME |
O nome do tempo de execução que está a usar. Para ver uma lista completa, consulte a
gcloud referência.
|