Kullanıcı hesaplarının Firebase Authentication oluşturulması ve silinmesiyle ilgili işlevleri tetikleyebilirsiniz. Örneğin, uygulamanızda yeni hesap oluşturan bir kullanıcıya hoş geldiniz e-postası gönderebilirsiniz. Bu sayfadaki örnekler, tam olarak bunu yapan bir örneğe dayanmaktadır: Hesap oluşturma ve silme işlemlerinde hoş geldiniz ve veda e-postaları gönderir.
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
Authentication alt paketindeki onUserCreated etkinlik işleyicisini kullanarak firebase-functions/v2/identity 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ı, aşağıdaki 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.
- Bir kullanıcı, ilk kez yeni bir anonim kimlik doğrulama oturumunda oturum açar.
Kullanıcı, özel bir jeton kullanarak ilk kez oturum açtığında Cloud Functions etkinliği tetiklenmez.
Tetikleyici seçeneklerini ve çok kiracılı yapıyı yapılandırma
Seçenekler nesnesi (AuthOptions) onUserCreated işlevine ilk parametre olarak 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); }, );
Projenizde Identity Platform çoklu kiracılığı kullanılıyorsa tetikleyiciyi aşağıdaki gibi kapsamlandırabilirsiniz:
- Varsayılan proje (kiracı yok): Yalnızca varsayılan projede oluşturulan kullanıcıları dinlemek için
tenantIddeğeriniIS_NOT_TENANTolarak ayarlayın. - Belirli kiracı: Yalnızca söz konusu kiracıda oluşturulan kullanıcıları dinlemek için kiracının dize kimliğini (örneğin,
{ tenantId: "tenant-id-1" }) sağlayın. - Tüm kiracılar ve kullanıcılar:
tenantIdatlanırsa işlev, projedeki tüm kiracılarda ve varsayılan proje kullanıcılarında kullanıcı oluşturma etkinliklerinde tetiklenir.
tenantId'ya ek olarak region, concurrency, cpu, memory, timeoutSeconds, minInstances, maxInstances ve secrets dahil olmak üzere 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ı özelliklerinin listesine event.data üzerinden 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'ya ek olarak aşağıdaki gibi etkinlik meta verilerine 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ı gösteren bir ISO 8601 zaman damgası.event.project: Google Cloud proje kimliği.event.tenantId: Kullanıcıyla ilişkili Identity Platform kiracı kimliği (varsa).
Kullanıcı silindiğinde bir işlevi tetikleme
Kullanıcı oluşturma işleminde bir işlevi tetikleyebildiğiniz gibi, kullanıcı silme etkinliklerine de yanıt verebilirsiniz. Gösterildiği gibi firebase-functions/v2/identity öğesinden
onUserDeleted
etkinlik işleyiciyi 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'da olduğu gibi, onUserDeleted'ı da { tenantId: IS_NOT_TENANT } gibi seçeneklerle yapılandırarak tetikleyicileri varsayılan projedeki kullanıcılarla kısıtlayabilirsiniz.
Tetikleyici engelleme işlevleri
Firebase Authentication with Identity Platform planına yükselttiyseniz Firebase Authentication süresini engelleme işlevlerini kullanarak uzatabilirsiniz.
Engelleme işlevleri, bir kullanıcının uygulamanıza kaydolup kaydolamayacağını veya uygulamanızda oturum açıp açmayacağını belirleyen özel bir 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 kimliğini doğrulamasını engellemenize veya kullanıcının bilgilerini ve 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 olarak değiştirilebilir bir duruma bağlı olmadığından emin olun.
- İdempotensi için tasarlama: 2. nesilde etkinlik teslimatı, Eventarc aracılığıyla en az bir kez yapılır. İşlevlerinizin idempotent olduğundan emin olun. Örneğin, yan etkileri gerçekleştirmeden önce bir karşılama e-postasının gönderilmediğini veya bir veritabanı girişinin başlatılmadığını doğrulayın.
- Çok kiracılı işlevlerin kapsamını belirleyin: Uygulamanız Identity Platform'un çok kiracılı özelliğini kullanıyorsa işlevlerinizin tüm kiracılardaki veya yalnızca belirli kiracılardaki etkinlikleri işleyip işlemesi gerektiğini doğrulayın. Kiracı kullanıcılarının yalnızca birincil proje için tasarlanan işlevleri tetiklemesini önlemek için
tenantId: IS_NOT_TENANTkullanın. - Bölgeleri ve kaynak ayırmayı 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.