Firebase Authentication tetikleyicileri

Firebase Authentication kullanıcı hesaplarının oluşturulmasına ve silinmesine yanıt olarak işlevleri tetikleyebilirsiniz. Örneğin, uygulamanızda yeni hesap oluşturan bir kullanıcıya karşılama e-postası gönderebilirsiniz. Bu sayfadaki örnekler, tam olarak bunu yapan bir örneğe dayanmaktadır: Hesap oluşturma ve silme işlemlerinde karşılama ve veda e-postaları gönderme.

Kullanım alanlarıyla ilgili daha fazla örnek için Cloud Functions ile neler yapabilirim? başlıklı makaleyi inceleyin.

Kullanıcı oluşturulduğunda bir işlevi tetikleme

firebase-functions/v2/identity alt paketindeki onUserCreated etkinlik işleyiciyi kullanarak bir Authentication kullanıcısı oluşturulduğunda tetiklenen bir işlev oluşturabilirsiniz:

const { onUserCreated } = require("firebase-functions/identity");
const { defineSecret } = require("firebase-functions/params");
const { logger } = require("firebase-functions");
const { sendWelcomeEmail } = require("./utils/myEmailService");

const emailApiKey = defineSecret("EMAIL_API_KEY");

exports.newUserWelcome = onUserCreated(
  { secrets: [emailApiKey] },
  async (event) => {
    const { uid, email, displayName } = event.data;

    if (!email) {
      logger.log(`User ${uid} does not have an email address.`);
      return;
    }

    await sendWelcomeEmail(email, displayName);
  },
);

Authentication hesapları, şu durumlarda Cloud Functions için kullanıcı oluşturma etkinliklerini tetikler:

  • Kullanıcı bir e-posta hesabı ve şifre oluşturur.
  • Kullanıcı, birleştirilmiş kimlik sağlayıcı kullanarak ilk kez oturum açar.
  • Geliştirici, Admin SDK'yı kullanarak bir hesap oluşturur.
  • Kullanıcı, yeni bir anonim kimlik doğrulama oturumunda ilk kez oturum açtığında.

Kullanıcı özel jeton kullanarak ilk kez oturum açtığında Cloud Functions etkinliği tetiklenmez.

Tetikleyici seçeneklerini ve çoklu kiracılığı yapılandırma

onUserCreated işlevine ilk parametre olarak bir seçenekler nesnesi (AuthOptions) ileterek işlevinizi yapılandırabilirsiniz:

/**
 * Sends a welcome email scoped to a specific tenant in Identity Platform.
 */
exports.sendWelcomeEmailToTenant = onUserCreated(
  {
    secrets: [emailApiKey],
    // Only trigger when a user is a member of this tenant
    tenantId: "my-tenant-id",
  },
  async (event) => {
    const { uid, email, displayName } = event.data;
    // Customize the email for this tenant
    await sendWelcomeEmail(email, displayName, event.tenantId);
  },
);
  /**
 * Sends a welcome email only to users not associated with any tenant.
 */
exports.sendWelcomeEmailNoTenant = onUserCreated(
  {
    secrets: [emailApiKey],
    // Only trigger when a user is NOT a member of a tenant
    tenantId: IS_NOT_TENANT,
  },
  async (event) => {
    const { email, displayName } = event.data;

    // Send a generic welcome email
    await sendWelcomeEmail(email, displayName);
  },
);

Projeniz Identity Platform çoklu kiracılığını kullanıyorsa tetikleyiciyi şu şekilde kapsayabilirsiniz:

  • Varsayılan proje (kiracı yok): Yalnızca varsayılan projede oluşturulan kullanıcıları dinlemek için tenantId değerini IS_NOT_TENANT olarak ayarlayın.
  • Belirli kiracı: Yalnızca bu kiracıda oluşturulan kullanıcıları dinlemek için kiracının dize kimliğini (ör. { tenantId: "tenant-id-1" }) sağlayın.
  • Tüm kiracılar ve kullanıcılar: tenantId atlanırsa işlev, projedeki tüm kiracılar ve varsayılan proje kullanıcıları genelinde kullanıcı oluşturma etkinliklerinde tetiklenir.

tenantId parametresine ek olarak region, concurrency, cpu, memory, timeoutSeconds, minInstances, maxInstances ve secrets gibi standart 2. nesil yapılandırma seçeneklerini belirtebilirsiniz.

Kullanıcı özelliklerine erişme

İşlevinize döndürülen kullanıcı verilerinden, yeni oluşturulan kullanıcının UserRecord nesnesinde bulunan kullanıcı özellikleri listesine event.data aracılığıyla erişebilirsiniz. Örneğin, kullanıcının e-posta adresini ve görünen adını aşağıdaki gibi alabilirsiniz:

const { uid, email, displayName } = event.data;

2. nesildeki kimlik doğrulama tetikleyicileri bir AuthEvent nesnesi alır. event.data özelliğine ek olarak aşağıdaki gibi etkinlik meta verilerine de erişebilirsiniz:

  • event.id: Etkinliğin benzersiz tanımlayıcısı.
  • event.type: Etkinlik türü (google.firebase.auth.user.v2.created).
  • event.time: Etkinliğin gerçekleştiği zamanı temsil eden ISO 8601 zaman damgası.
  • event.project: Google Cloud proje kimliği.
  • event.tenantId: Varsa kullanıcıyla ilişkili Identity Platform kiracı kimliği.

Kullanıcı silme işleminde bir işlevi tetikleme

Kullanıcı oluşturma işleminde bir işlevi tetikleyebileceğiniz gibi kullanıcı silme etkinliklerine de yanıt verebilirsiniz. firebase-functions/v2/identity'ten onUserDeleted etkinlik işleyicisini gösterildiği gibi kullanın:

const { onUserDeleted } = require("firebase-functions/identity");
const { defineSecret } = require("firebase-functions/params");
const { logger } = require("firebase-functions");
const { sendGoodbyeEmail } = require("./utils/myEmailService");

const emailApiKey = defineSecret("EMAIL_API_KEY");

exports.deletedUserFarewell = onUserDeleted(
  { secrets: [emailApiKey] },
  async (event) => {
    const { uid, email, displayName } = event.data;
    if (!email) {
      logger.log(`User ${uid} does not have an email address.`);
      return;
    }

    await sendGoodbyeEmail(email, displayName);
  },
);

onUserCreated gibi onUserDeleted aracını da { tenantId: IS_NOT_TENANT } gibi seçeneklerle yapılandırarak tetikleyicileri varsayılan projedeki kullanıcılarla kısıtlayabilirsiniz.

Engelleme işlevlerini tetikleme

Firebase Authentication with Identity Platform sürümüne yükselttiyseniz engelleme işlevlerini kullanarak Firebase Authentication uygulamasını genişletebilirsiniz.

Engelleme işlevleri, bir kullanıcının uygulamanıza kaydolma veya oturum açma sonucunu değiştiren özel kodu eşzamanlı olarak yürütmenize olanak tanır. Bir etkinlik tamamlandıktan sonra eşzamansız olarak çalışan arka plan tetikleyicilerinin aksine, engelleme işlevleri, belirli ölçütleri karşılamayan bir kullanıcının kimlik doğrulamasını engellemenize veya bir kullanıcının bilgilerini ve hak taleplerini istemci uygulamanıza döndürmeden önce güncellemenize olanak tanır.

2. nesil tetikleyiciler için en iyi uygulamalar

2. nesil kimlik doğrulama tetikleyicilerini uygularken aşağıdaki en iyi uygulamaları göz önünde bulundurun:

  • Eşzamanlılığı hesaba katın: Cloud Functions (2. nesil) örnekleri, eşzamanlı istekleri işler (CPU ≥ 1 olduğunda varsayılan olarak 80 eşzamanlı istek). İşlevinizin, eşzamanlı yürütmeler arasında genel değişken duruma bağlı olmadığından emin olun.
  • Eş kuvvetlilik için tasarlama: 2. nesilde etkinlik yayını, Eventarc aracılığıyla en az bir kez yapılır. İşlevlerinizin eş güçlü olduğundan emin olun. Örneğin, yan etkileri gerçekleştirmeden önce karşılama e-postasının gönderilmediğini veya veritabanı girişinin başlatılmadığını doğrulayın.
  • Çok kiracılı işlevlerin kapsamını belirleme: Uygulamanız Identity Platform'un çok kiracılı özelliğini kullanıyorsa işlevlerinizin tüm kiracılardaki etkinlikleri mi yoksa yalnızca belirli kiracılardaki etkinlikleri mi işlemesi gerektiğini doğrulayın. Kiracı kullanıcılarının yalnızca birincil proje için tasarlanmış işlevleri tetiklemesini önlemek için tenantId: IS_NOT_TENANT kullanın.
  • Bölgeleri ve kaynak tahsisini yönetme: Kimlik doğrulama sağlayıcınız ile işlev yürütme ortamınız arasındaki ağ gecikmesini en aza indirmek için işlev konumunu (region) belirtin.