Gatilhos do Firebase Authentication
O Cloud Run functions pode ser acionado por eventos do Firebase Authentication no mesmo projetoGoogle Cloud que a função. Entre esses eventos estão a criação e a exclusão de usuários. Por exemplo, é possível enviar um e-mail de boas-vindas para um usuário que acabou de criar uma conta no app.
Tipos de evento
O Firebase Authentication pode acionar funções em resposta a eventos create e delete do usuário.
| Tipo de evento | Gatilho |
|---|---|
providers/firebase.auth/eventTypes/user.create |
Acionado quando uma conta de usuário é criada. |
providers/firebase.auth/eventTypes/user.delete |
Acionado quando uma conta de usuário é excluída. |
Criação de usuário
As contas do Firebase acionam eventos de criação de usuários do Cloud Run functions quando:
um usuário criar uma conta de e-mail e uma senha;
um usuário fizer login pela primeira vez com um provedor de identidade federado;
o desenvolvedor criar uma conta com o SDK Admin do Firebase;
um usuário fizer login em uma sessão de autenticação anônima pela primeira vez.
Exclusão de usuário
Também é possível configurar uma função para acionamento mediante exclusão do usuário.
Estrutura do evento
Os dados do evento são fornecidos como um objeto UserRecord.
Um exemplo de evento de criação de conta baseada em senha é mostrado abaixo:
{ "email": "me@example.com", "metadata": { "createdAt": "2018-10-19T19:29:16Z" }, "uid": "XXXXX" }
Algumas propriedades desse objeto são definidas somente ao usar determinados métodos de autenticação. Por exemplo, os eventos de conta baseada em senha definem uma propriedade email que contém o endereço de e-mail do usuário. A propriedade uid (que contém um ID do usuário exclusivo para seu projeto) é 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); } }
Como implantar a função
Para implantar a função, você precisa especificar o tipo de evento e o projeto em que o Firebase Auth está configurado. No console Google Cloud , há um único campo para Tipo de evento porque o projeto é considerado igual ao projeto que contém a função.
Porém, na linha de comando, você precisa usar strings específicas para determinar esses dois parâmetros. O comando gcloud a seguir implanta uma função que é acionada pelos eventos create do usuário:
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 registrado do Cloud Run functions que você está implantando.
Pode ser o nome de uma função no código-fonte ou uma string arbitrária. Se FUNCTION_NAME for uma string arbitrária, você precisará incluir a sinalização --entry-point.
|
--entry-point ENTRY_POINT |
O nome de uma função ou classe no código-fonte. Opcional, a menos que
você não tenha usado FUNCTION_NAME
para especificar a
função no código-fonte a ser executada durante a implantação. Nesse caso, use --entry-point para fornecer o nome da função executável.
|
--trigger-event NAME |
O nome do tipo de evento que aciona a função. Neste caso, ele precisa ser um dos de criação ou exclusão, conforme listado acima. |
--trigger-resource NAME |
O ID (neste exemplo, YOUR_PROJECT_ID) do projeto que contém sua função e o Firebase Authentication. |
--runtime RUNTIME |
O nome do ambiente de execução que você está usando. Para uma lista completa, consulte a referência do gcloud.
|