Engelleme işlevleri, bir uygulamanıza kaydettiren veya oturum açan bir kullanıcı. Örneğin, bir kullanıcının belirli bir kullanıcı kimlik doğrulamasını otomatik olarak yapmayan bilgileri istemci uygulamanıza döndürmeden önce kontrol edin.
Başlamadan önce
Engelleme işlevlerini kullanmak için Firebase projenizi, Identity Platform ile Firebase Authentication'a yükseltmeniz gerekir. Henüz yükseltme yapmadıysanız önce yükseltme yapın.
Engelleme işlevlerini anlama
Engelleme işlevlerini iki etkinlik için kaydedebilirsiniz:
beforeCreate
: Yeni bir kullanıcı Firebase Authentication veritabanına geri dönmeden önce istemci uygulaması.beforeSignIn
: Kullanıcının kimlik bilgileri doğrulandıktan sonra tetiklenir ancak Firebase Authentication istemci uygulamanıza kimlik jetonu döndürmeden önce. Eğer çok öğeli kimlik doğrulaması kullandığı için, Kullanıcı ikinci faktör doğrulandıktan sonra tetiklenir. Yeni bir kullanıcı,beforeCreate
ek olarakbeforeSignIn
öğesini de tetikler.
Engelleme işlevlerini kullanırken aşağıdakileri göz önünde bulundurun:
İşleviniz 7 saniye içinde yanıt vermelidir. 7 saniye sonra, Firebase Authentication hata döndürüyor ve istemci işlemi başarısız oluyor.
200
dışındaki HTTP yanıt kodları istemci uygulamalarınıza iletilir. Emin olun istemci kodunuz, işlevinizin döndürebileceği hataları işler.İşlevler, projenizdeki tüm kullanıcılar için geçerlidir. Bu kullanıcılar, kiracı olarak gönderin. Firebase Authentication, işlevinizin kullanıcıları hakkında bilgi sağlar: bu nedenle de buna göre yanıt verebilirsiniz.
Başka bir kimlik sağlayıcıyı bir hesaba bağlamak, kayıtlı olan tüm öğeleri yeniden tetikler
beforeSignIn
işlev.Anonim ve özel kimlik doğrulama, engelleme işlevlerini tetiklemez.
Engelleme işlevi dağıtma
Özel kodunuzu kullanıcı kimlik doğrulama akışlarına eklemek için engellemeyi dağıtın işlevlerine dahildir. Engelleme işlevleriniz dağıtıldıktan sonra özel kodunuz kimlik doğrulama ve kullanıcı oluşturma işleminin başarıyla tamamlanması için tamamlanmış olması gerekir.
Engelleme işlevini, herhangi bir işlevi dağıttığınız şekilde dağıtırsınız. (Cloud Functions Başlarken sayfasına bakın bakın). Özet olarak:
beforeCreate
etkinliğini işleyen Cloud Functions işlevlerini yazın.beforeSignIn
etkinliği ya da her ikisi.Örneğin, başlamak için aşağıdaki no-op fonksiyonlarını
index.js
:const functions = require('firebase-functions'); exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => { // TODO }); exports.beforeSignIn = functions.auth.user().beforeSignIn((user, context) => { // TODO });
Yukarıdaki örneklerde özel kimlik doğrulama mantığının uygulanması atlanmıştır. Görüntüleyin kullanarak engelleme işlevlerinizi nasıl uygulayacağınızı Belirli örnekler için sık karşılaşılan senaryolar.
Firebase CLI'yı kullanarak işlevlerinizi dağıtın:
firebase deploy --only functions
İşlevlerinizi her güncellediğinizde yeniden dağıtmanız gerekir.
Kullanıcı ve bağlam bilgilerini alma
beforeSignIn
ve beforeCreate
etkinlikleri, User
ve EventContext
sağlar
oturum açan kullanıcıyla ilgili bilgiler içeren nesnelerdir. Bu değerleri kullan
kodunu girmeniz gerekir.
User
nesnesinde kullanılabilen özelliklerin listesi için bkz.
UserRecord
API referansı.
EventContext
nesnesi aşağıdaki özellikleri içerir:
Ad | Açıklama | Örnek |
---|---|---|
locale |
Uygulama yerel ayarı. Yerel ayarı şunu kullanarak ayarlayabilirsiniz: istemci SDK'sını kullanarak veya yerel ayar başlığını REST API'de geçirerek yapabilirsiniz. | fr veya sv-SE |
ipAddress
| Son kullanıcının kaydettiği veya oturum açtığı cihazın IP adresi var. | 114.14.200.1 |
userAgent
| Engelleme işlevini tetikleyen kullanıcı aracısı. | Mozilla/5.0 (X11; Linux x86_64) |
eventId
| Etkinliğin benzersiz tanımlayıcısı. | rWsyPtolplG2TBFoOkkgyg |
eventType
|
Etkinlik türü. Bu düğme, etkinlik adıyla ilgili şunun gibi bilgiler sağlar:
beforeSignIn veya beforeCreate ve
ilişkili oturum açma yöntemi (ör. Google veya e-posta/şifre)
|
providers/cloud.auth/eventTypes/user.beforeSignIn:password
|
authType
| Her zaman USER . |
USER
|
resource
| Firebase Authentication projesi veya kiracısı. |
projects/project-id/tenants/tenant-id
|
timestamp
| Etkinliğin tetiklendiği zaman; RFC 3339 dizesine benzer. | Tue, 23 Jul 2019 21:10:57 GMT
|
additionalUserInfo
| Kullanıcı hakkında bilgiler içeren bir nesne. |
AdditionalUserInfo
|
credential
| Kullanıcının kimlik bilgileri hakkında bilgi içeren bir nesne. |
AuthCredential
|
Kayıt veya oturum açmayı engelleme
Bir kayıt veya oturum açma girişimini engellemek içinHttpsError
işlevini kullanın. Örneğin:
Node.js
throw new functions.auth.HttpsError('permission-denied');
Aşağıdaki tabloda, bildirebileceğiniz hatalar ve varsayılanları listelenmiştir. hata mesajı:
Ad | Kod | Mesaj |
---|---|---|
invalid-argument |
400 |
İstemci, geçersiz bağımsız değişken belirtti. |
failed-precondition |
400 |
Mevcut sistem durumunda istek yürütülemiyor. |
out-of-range |
400 |
İstemci, geçersiz aralık belirtti. |
unauthenticated |
401 |
Eksik, geçersiz veya süresi dolmuş OAuth jetonu. |
permission-denied |
403 |
İstemci, gerekli izne sahip değil. |
not-found |
404 |
Belirtilen kaynak bulunamadı. |
aborted |
409 |
Okuma-değiştirme-yazma çakışması gibi eşzamanlılık çakışması. |
already-exists |
409 |
Bir istemcinin oluşturmaya çalıştığı kaynak zaten mevcut. |
resource-exhausted |
429 |
Kaynak kotası kalmadı veya hız sınırlamasına yaklaşılıyor. |
cancelled |
499 |
İstek, istemci tarafından iptal edildi. |
data-loss |
500 |
Kurtarılamaz veri kaybı veya veri bozulması. |
unknown |
500 |
Bilinmeyen sunucu hatası. |
internal |
500 |
Dahili sunucu hatası. |
not-implemented |
501 |
API yöntemi, sunucu tarafından uygulanmadı. |
unavailable |
503 |
Hizmet kullanılamıyor. |
deadline-exceeded |
504 |
İstek bitiş tarihi aşıldı. |
Özel bir hata mesajı da belirtebilirsiniz:
Node.js
throw new functions.auth.HttpsError('permission-denied', 'Unauthorized request origin!');
Aşağıdaki örnekte, belirli bir alan adında olmayan kullanıcıların nasıl engelleneceği gösterilmektedir alan adının uygulamanıza kaydolmasını engeller:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
// (If the user is authenticating within a tenant context, the tenant ID can be determined from
// user.tenantId or from context.resource, e.g. 'projects/project-id/tenant/tenant-id-1')
// Only users of a specific domain can sign up.
if (user.email.indexOf('@acme.com') === -1) {
throw new functions.auth.HttpsError('invalid-argument', `Unauthorized email "${user.email}"`);
}
});
Varsayılan veya özel mesaj kullandığınızdan bağımsız olarak, Cloud Functions hatayı sarmalar ve dahili hata. Örneğin:
throw new functions.auth.HttpsError('invalid-argument', `Unauthorized email [email protected]}`);
Uygulamanız hatayı yakalamalı ve uygun şekilde işlemelidir. Örneğin:
JavaScript
// Blocking functions can also be triggered in a multi-tenant context before user creation.
// firebase.auth().tenantId = 'tenant-id-1';
firebase.auth().createUserWithEmailAndPassword('[email protected]', 'password')
.then((result) => {
result.user.getIdTokenResult()
})
.then((idTokenResult) => {
console.log(idTokenResult.claim.admin);
})
.catch((error) => {
if (error.code !== 'auth/internal-error' && error.message.indexOf('Cloud Function') !== -1) {
// Display error.
} else {
// Registration succeeds.
}
});
Bir kullanıcıyı değiştirme
Bir kayıt veya oturum açma girişimini engellemek yerine,
işlemini sürdürün, ancak şuraya kaydedilen User
nesnesini değiştirin:
Firebase Authentication'ın veritabanına entegre edilir ve istemciye geri döndürülür.
Bir kullanıcıyı değiştirmek için etkinlik işleyicinizden şunu içeren bir nesne döndürün: alanları tıklayın. Aşağıdaki alanları değiştirebilirsiniz:
displayName
disabled
emailVerified
photoUrl
customClaims
sessionClaims
(yalnızcabeforeSignIn
)
sessionClaims
hariç, değiştirilen tüm alanlar şuraya kaydedilir:
Firebase Authentication'ın veritabanı; yani yanıta dahil edilirler
ve kullanıcı oturumları arasında kalıcı hale gelir.
Aşağıdaki örnekte, varsayılan görünen adın nasıl ayarlanacağı gösterilmektedir:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
return {
// If no display name is provided, set it to "Guest".
displayName: user.displayName || 'Guest';
};
});
Hem beforeCreate
hem de beforeSignIn
için bir etkinlik işleyici kaydederseniz
beforeSignIn
işlevinin beforeCreate
sonrasında yürütüldüğünü unutmayın. Kullanıcı alanları şurada güncellendi:
beforeCreate
, beforeSignIn
alt bölgesinde görünür. Şundan farklı bir alan ayarlarsanız:
Her iki etkinlik işleyicide de sessionClaims
(beforeSignIn
içinde ayarlanan değer)
beforeCreate
içinde ayarlanan değerin üzerine yazılır. Yalnızca sessionClaims
için
geçerli oturumun jeton taleplerine uygulanır ancak devam eder veya
emin olun.
Örneğin, herhangi bir sessionClaims
ayarlanırsa beforeSignIn
bunları döndürür.
tüm beforeCreate
hak talepleriyle ilişkilendirilir ve birleştirilir. Birleştirildiğinde,
sessionClaims
anahtarı customClaims
içindeki bir anahtarla eşleşiyor,
sessionClaims
, jeton hak taleplerinde customClaims
öğesinin üzerine yazılacak
tuşuna basın. Ancak gereksiz customClaims
anahtarı
izin verilebilir.
Desteklenen OAuth kimlik bilgileri ve verileri
OAuth kimlik bilgilerini ve verilerini, birçok farklı kuruluştan engelleme işlevlerine iletebilirsiniz. kimlik sağlayıcılar. Aşağıdaki tabloda, kimlik bilgileri ve verilerin ne anlama geldiği gösterilmektedir her kimlik sağlayıcı için desteklenir:
Kimlik Sağlayıcı | Kimlik Jetonu | Erişim Jetonu | Son Kullanma Tarihi | Jeton Gizli Anahtarı | Yenileme Jetonu | Oturum Açma Hak Talepleri |
---|---|---|---|---|---|---|
Evet | Evet | Evet | Hayır | Evet | Hayır | |
Hayır | Evet | Evet | Hayır | Hayır | Hayır | |
Hayır | Evet | Hayır | Evet | Hayır | Hayır | |
GitHub | Hayır | Evet | Hayır | Hayır | Hayır | Hayır |
Microsoft | Evet | Evet | Evet | Hayır | Evet | Hayır |
Hayır | Evet | Evet | Hayır | Hayır | Hayır | |
Yahoo | Evet | Evet | Evet | Hayır | Evet | Hayır |
Apple | Evet | Evet | Evet | Hayır | Evet | Hayır |
SAML | Hayır | Hayır | Hayır | Hayır | Hayır | Evet |
OIDC | Evet | Evet | Evet | Hayır | Evet | Evet |
Jetonları yenile
Engelleme işlevinde yenileme jetonu kullanmak için önce onay kutusunu işaretleyin.
Yenileme jetonu, oturum açarken kimlik sağlayıcılar tarafından döndürülmez kimlik jetonu veya erişim jetonu gibi bir OAuth kimlik bilgisiyle doğrudan erişilebilir. Burada aynı istemci tarafı OAuth kimlik bilgisi, engellemeye işlevini kullanın.
Aşağıdaki bölümlerde her bir kimlik sağlayıcı türü ve desteklendikleri özellikler açıklanmaktadır. kimlik bilgileri ve diğer veriler.
Genel OIDC sağlayıcıları
Kullanıcı, genel bir OIDC sağlayıcısıyla oturum açtığında aşağıdaki kimlik bilgileri iletilecektir:
- Kimlik jetonu:
id_token
akışı seçilirse sağlanır. - Erişim jetonu: Kod akışı seçiliyse sağlanır. Kodun akışı şu anda yalnızca REST API aracılığıyla desteklenmektedir.
- Yenileme jetonu:
offline_access
kapsam seçili olduğundan emin olun.
Örnek:
const provider = new firebase.auth.OAuthProvider('oidc.my-provider');
provider.addScope('offline_access');
firebase.auth().signInWithPopup(provider);
Bir kullanıcı Google ile oturum açtığında aşağıdaki kimlik bilgileri aktarılır:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu: Yalnızca aşağıdaki özel parametreler geçerliyse sağlanır
istekte bulunuldu:
access_type=offline
prompt=consent
(kullanıcı daha önce izin verdiyse ve hayırsa) yeni kapsam istendi
Örnek:
const provider = new firebase.auth.GoogleAuthProvider();
provider.setCustomParameters({
'access_type': 'offline',
'prompt': 'consent'
});
firebase.auth().signInWithPopup(provider);
Google yenileme jetonları hakkında daha fazla bilgi edinin.
Bir kullanıcı Facebook ile oturum açtığında, aşağıdaki kimlik bilgisi aktarılır:
- Erişim jetonu: Değiştirilebilecek bir erişim jetonu döndürülür başka bir erişim jetonu. Farklı içerik türleri hakkında daha fazla bilgi erişim jetonları nasıl değiştirebileceğiniz ve bunları nasıl kullanabileceğiniz uzun ömürlü jetonlar.
GitHub
Bir kullanıcı GitHub ile oturum açtığında aşağıdaki kimlik bilgisi aktarılır:
- Erişim jetonu: İptal edilmediği sürece süresi dolmaz.
Microsoft
Bir kullanıcı Microsoft ile oturum açtığında aşağıdaki kimlik bilgileri aktarılır:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu:
offline_access
kapsam seçili olduğundan emin olun.
Örnek:
const provider = new firebase.auth.OAuthProvider('microsoft.com');
provider.addScope('offline_access');
firebase.auth().signInWithPopup(provider);
Yahoo
Bir kullanıcı Yahoo ile oturum açtığında aşağıdaki kimlik bilgileri aktarılır hiçbir özel parametre veya kapsam olmadan:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu
Bir kullanıcı LinkedIn ile oturum açtığında aşağıdaki kimlik bilgileri aktarılır:
- Erişim jetonu
Apple
Bir kullanıcı Apple ile oturum açtığında aşağıdaki kimlik bilgileri aktarılacak hiçbir özel parametre veya kapsam olmadan:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu
Sık karşılaşılan senaryolar
Aşağıdaki örneklerde, işlevlerin engellenmesine ilişkin bazı yaygın kullanım alanları gösterilmektedir:
Yalnızca belirli bir alandan kayıt yapılmasına izin verme
Aşağıdaki örnekte,
example.com
alanın uygulamanıza kaydolmasını engelleme:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (!user.email || user.email.indexOf('@example.com') === -1) {
throw new functions.auth.HttpsError(
'invalid-argument', `Unauthorized email "${user.email}"`);
}
});
Doğrulanmamış e-postalara sahip kullanıcıların kaydolmasını engelleme
Aşağıdaki örnekte, doğrulanmamış e-postalara sahip kullanıcıların uygulamanıza kaydolma:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (user.email && !user.emailVerified) {
throw new functions.auth.HttpsError(
'invalid-argument', `Unverified email "${user.email}"`);
}
});
Kayıtta e-posta doğrulaması isteme
Aşağıdaki örnekte, bir kullanıcının kaydediliyor:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
const locale = context.locale;
if (user.email && !user.emailVerified) {
// Send custom email verification on sign-up.
return admin.auth().generateEmailVerificationLink(user.email).then((link) => {
return sendCustomVerificationEmail(user.email, link, locale);
});
}
});
exports.beforeSignIn = functions.auth.user().beforeSignIn((user, context) => {
if (user.email && !user.emailVerified) {
throw new functions.auth.HttpsError(
'invalid-argument', `"${user.email}" needs to be verified before access is granted.`);
}
});
Belirli kimlik sağlayıcı e-postalarının doğrulanmış olarak değerlendirilmesi
Aşağıdaki örnekte, belirli bir kimlikten gelen kullanıcı e-postalarının nasıl ele alınacağı gösterilmektedir Doğrulanan sağlayıcılar:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (user.email && !user.emailVerified && context.eventType.indexOf(':facebook.com') !== -1) {
return {
emailVerified: true,
};
}
});
Belirli IP adreslerinden oturum açmayı engelleme
Belirli IP adresi aralıklarından oturum açmayı engellemeyle ilgili örnek aşağıdaki örnekte:
Node.js
exports.beforeSignIn = functions.auth.user().beforeSignIn((user, context) => {
if (isSuspiciousIpAddress(context.ipAddress)) {
throw new functions.auth.HttpsError(
'permission-denied', 'Unauthorized access!');
}
});
Özel ve oturum hak taleplerini ayarlama
Aşağıdaki örnekte, özel ve oturum hak taleplerinin nasıl ayarlanacağı gösterilmektedir:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (context.credential &&
context.credential.providerId === 'saml.my-provider-id') {
return {
// Employee ID does not change so save in persistent claims (stored in
// Auth DB).
customClaims: {
eid: context.credential.claims.employeeid,
},
// Copy role and groups to token claims. These will not be persisted.
sessionClaims: {
role: context.credential.claims.role,
groups: context.credential.claims.groups,
}
}
}
});
Şüpheli etkinliği izlemek için IP adreslerini izleme
Kullanıcının oturum açtığı IP adresini izleyerek jeton hırsızlığını önleyebilirsiniz. ve sonraki isteklerde bunu IP adresiyle karşılaştırırız. İstek, şüpheli görünüyorsa; örneğin, IP'ler farklı bir coğrafi bölgeden ) kullanıcının tekrar oturum açmasını isteyebilirsiniz.
Kullanıcının oturum açarken kullandığı IP adresini izlemek için oturum hak taleplerini kullanın:
Node.js
exports.beforeSignIn = functions.auth.user().beforeSignIn((user, context) => { return { sessionClaims: { signInIpAddress: context.ipAddress, }, }; });
Bir kullanıcı Firebase Authentication (istekteki IP adresini kullanılan IP ile karşılaştırın) oturum açmak için:
Node.js
app.post('/getRestrictedData', (req, res) => { // Get the ID token passed. const idToken = req.body.idToken; // Verify the ID token, check if revoked and decode its payload. admin.auth().verifyIdToken(idToken, true).then((claims) => { // Get request IP address const requestIpAddress = req.connection.remoteAddress; // Get sign-in IP address. const signInIpAddress = claims.signInIpAddress; // Check if the request IP address origin is suspicious relative to // the session IP addresses. The current request timestamp and the // auth_time of the ID token can provide additional signals of abuse, // especially if the IP address suddenly changed. If there was a sudden // geographical change in a short period of time, then it will give // stronger signals of possible abuse. if (!isSuspiciousIpAddressChange(signInIpAddress, requestIpAddress)) { // Suspicious IP address change. Require re-authentication. // You can also revoke all user sessions by calling: // admin.auth().revokeRefreshTokens(claims.sub). res.status(401).send({error: 'Unauthorized access. Please login again!'}); } else { // Access is valid. Try to return data. getData(claims).then(data => { res.end(JSON.stringify(data); }, error => { res.status(500).send({ error: 'Server error!' }) }); } }); });
Kullanıcı fotoğrafları filtreleniyor
Aşağıdaki örnekte, kullanıcıların nasıl arındırılacağı gösterilmektedir profil fotoğrafları:
Node.js
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (user.photoURL) {
return isPhotoAppropriate(user.photoURL)
.then((status) => {
if (!status) {
// Sanitize inappropriate photos by replacing them with guest photos.
// Users could also be blocked from sign-up, disabled, etc.
return {
photoUrl: PLACEHOLDER_GUEST_PHOTO_URL,
};
}
});
});
Görüntüleri algılama ve arındırma hakkında daha fazla bilgi için Cloud Vision belgelerine göz atın.
Kullanıcının kimlik sağlayıcı OAuth kimlik bilgilerine erişme
Aşağıdaki örnek, bir kullanıcı için yenileme jetonunun nasıl alınacağını gösterir ve Google Takvim API'lerini çağırmak için bunu kullanır. İlgili içeriği oluşturmak için kullanılan yenileme jetonu çevrimdışı erişim için depolanır.
Node.js
const {OAuth2Client} = require('google-auth-library');
const {google} = require('googleapis');
// ...
// Initialize Google OAuth client.
const keys = require('./oauth2.keys.json');
const oAuth2Client = new OAuth2Client(
keys.web.client_id,
keys.web.client_secret
);
exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
if (context.credential &&
context.credential.providerId === 'google.com') {
// Store the refresh token for later offline use.
// These will only be returned if refresh tokens credentials are included
// (enabled by Cloud console).
return saveUserRefreshToken(
user.uid,
context.credential.refreshToken,
'google.com'
)
.then(() => {
// Blocking the function is not required. The function can resolve while
// this operation continues to run in the background.
return new Promise((resolve, reject) => {
// For this operation to succeed, the appropriate OAuth scope should be requested
// on sign in with Google, client-side. In this case:
// https://www.googleapis.com/auth/calendar
// You can check granted_scopes from within:
// context.additionalUserInfo.profile.granted_scopes (space joined list of scopes).
// Set access token/refresh token.
oAuth2Client.setCredentials({
access_token: context.credential.accessToken,
refresh_token: context.credential.refreshToken,
});
const calendar = google.calendar('v3');
// Setup Onboarding event on user's calendar.
const event = {/** ... */};
calendar.events.insert({
auth: oauth2client,
calendarId: 'primary',
resource: event,
}, (err, event) => {
// Do not fail. This is a best effort approach.
resolve();
});
});
})
}
});
Kullanıcı işlemi için reCAPTCHA Enterprise kararını geçersiz kıl
Aşağıdaki örnekte, desteklenen kullanıcı akışları için reCAPTCHA Enterprise kararının nasıl geçersiz kılınacağı gösterilmektedir.
reCAPTCHA Enterprise'ı Firebase Authentication ile entegre etme hakkında daha fazla bilgi için reCAPTCHA Enterprise'ı etkinleştirme bölümüne bakın.
Engelleme işlevleri, özel faktörlere göre akışlara izin vermek veya akışları engellemek için kullanılabilir. Böylece, reCAPTCHA Enterprise tarafından sağlanan sonuç geçersiz kılınır.
Node.js
const {
auth,
} = require("firebase-functions/v1");
exports.checkrecaptchaV1 = auth.user().beforeSignIn((userRecord, context) => {
// Allow users with a specific email domain to sign in regardless of their recaptcha score.
if (userRecord.email && userRecord.email.indexOf('@acme.com') === -1) {
return {
recaptchaActionOverride: 'ALLOW',
};
}
// Allow users to sign in with recaptcha score greater than 0.5
if (context.additionalUserInfo.recaptchaScore > 0.5) {
return {
recaptchaActionOverride: 'ALLOW',
};
}
// Block all others.
return {
recaptchaActionOverride: 'BLOCK',
};
});