Gatilhos do Firebase Authentication

O Cloud Functions pode ser acionado por eventos do Firebase Authentication. 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 Acionador
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 Functions quando:

  • um usuário cria 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 faz login em uma nova 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 deste 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.

Código de amostra

Node.js 8+

/**
 * Triggered by creation or deletion of a Firebase Auth user object.
 *
 * @param {object} data The event payload.
 * @param {object} context The event metadata.
 */
exports.helloAuth = (data, context) => {
  try {
    console.log(
      `Function triggered by creation or deletion of user: ${data.uid}`
    );
    console.log(`Created at: ${data.metadata.createdAt}`);

    if (data.email) {
      console.log(`Email: ${data.email}`);
    }
  } catch (err) {
    console.error(err);
  }
};

Node.js 6 (obsoleto)

/**
 * Triggered by a change to a Firebase Auth user object.
 *
 * @param {!Object} event The Cloud Functions event.
 */
exports.helloAuth = event => {
  try {
    const data = event.data;
    console.log(`Function triggered by change to user: ${data.uid}`);
    console.log(`Created at: ${data.metadata.createdAt}`);

    if (event.data.email) {
      console.log(`Email: ${data.email}`);
    }
  } catch (err) {
    console.error(err);
  }
};

Python

import json
def hello_auth(data, context):
    """ Triggered by creation or deletion of a Firebase Auth user object.
     Args:
            data (dict): The event payload.
            context (google.cloud.functions.Context): Metadata for the event.
    """
    print('Function triggered by creation/deletion of user: %s' % data["uid"])
    print('Created at: %s' % data["metadata"]["createdAt"])

    if 'email' in data:
        print('Email: %s' % data["email"])

Go


// Package firebase contains a Firestore Cloud Function.
package firebase

import (
	"context"
	"log"
	"time"
)

// AuthEvent is the payload of a Firestore Auth event.
type AuthEvent struct {
	Email    string `json:"email"`
	Metadata struct {
		CreatedAt time.Time `json:"createdAt"`
	} `json:"metadata"`
	UID string `json:"uid"`
}

// HelloAuth is triggered by Firestore Auth events.
func HelloAuth(ctx context.Context, e AuthEvent) error {
	log.Printf("Function triggered by creation or deletion of user: %q", e.UID)
	log.Printf("Created at: %v", e.Metadata.CreatedAt)
	if e.Email != "" {
		log.Printf("Email: %q", e.Email)
	}
	return nil
}

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 do Cloud, há um único campo para Tipo de evento, pois é presumido que o projeto seja o mesmo que o projeto que contém sua 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 YOUR_FUNCTION_NAME \
  --trigger-event providers/firebase.auth/eventTypes/user.create \
  --trigger-resource YOUR_PROJECT_ID \
  --runtime RUNTIME
Argumento Descrição
--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 do projeto (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.