Engelleme işlevleri, bir kullanıcının uygulamanıza kaydolmasının veya oturum açmasının sonucunu değiştiren özel bir kod yürütmenize olanak tanır. Örneğin, belirli ölçütleri karşılamayan bir kullanıcının kimlik doğrulaması yapmasını engelleyebilir veya kullanıcıyı istemci uygulamanıza döndürmeden önce bilgilerini güncelleyebilirsiniz.
Başlamadan önce
Engelleme işlevlerini kullanmak için Firebase projenizi Firebase Authentication with Identity Platform sürümüne yükseltmeniz gerekir. Henüz yükseltme yapmadıysanız önce bunu yapın.
Engelleme işlevlerini anlama
Aşağıdaki etkinlikler için engelleme işlevleri kaydedebilirsiniz:
beforeCreate
: Yeni bir kullanıcı Firebase Authentication veritabanına kaydedilmeden ve istemci uygulamanıza bir jeton döndürülmeden önce tetiklenir.beforeSignIn
: Kullanıcının kimlik bilgileri doğrulandıktan sonra ancak Firebase Authentication, istemci uygulamanıza bir kimlik jetonu döndürmeden önce tetiklenir. Uygulamanız çok faktörlü kimlik doğrulama kullanıyorsa işlev, kullanıcı ikinci faktörünü doğruladıktan sonra tetiklenir. Yeni bir kullanıcı oluşturmanınbeforeCreate
'ye ek olarakbeforeSignIn
'yi de tetiklediğini unutmayın.beforeEmail
(yalnızca Node.js): Bir kullanıcıya e-posta (ör. oturum açma veya şifre sıfırlama e-postası) gönderilmeden önce tetiklenir.beforeSms
(yalnızca Node.js): Çok faktörlü kimlik doğrulama gibi durumlarda, kullanıcıya SMS mesajı gönderilmeden önce tetiklenir.
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 bir hata döndürür ve istemci işlemi başarısız olur.
200
dışındaki HTTP yanıt kodları istemci uygulamalarınıza iletilir. İstemci kodunuzun, işlevinizin döndürebileceği tüm hataları ele aldığından emin olun.İşlevler, kiracı içinde bulunanlar da dahil olmak üzere projenizdeki tüm kullanıcılar için geçerlidir. Firebase Authentication, ait oldukları tüm kiracılar da dahil olmak üzere işlevinize ait kullanıcılar hakkında bilgi sağlar. Böylece, buna göre yanıt verebilirsiniz.
Hesaba başka bir kimlik sağlayıcı bağlamak, kayıtlı tüm
beforeSignIn
işlevlerini yeniden tetikler.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 engelleme işlevlerini dağıtın. Engelleme işlevleriniz dağıtıldıktan sonra kimlik doğrulama ve kullanıcı oluşturma işleminin başarılı olması için özel kodunuzun başarıyla tamamlanması gerekir.
Engelleme işlevini, diğer işlevleri dağıttığınız gibi dağıtırsınız. (Ayrıntılar için Cloud Functions Başlangıç sayfasına bakın). Özet olarak:
Hedeflenen etkinliği işleyen bir işlev yazın.
Örneğin, başlamak için
index.js
öğesine aşağıdaki gibi bir işlemsiz işlev ekleyebilirsiniz:const functions = require('firebase-functions/v1'); exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => { // TODO }); The above example has omitted the implementation of custom auth logic. See the following sections to learn how to implement your blocking functions and [Common scenarios](#common-scenarios) for specific examples.
Firebase KSA'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, oturum açan kullanıcıyla ilgili bilgiler içeren User
ve EventContext
nesneleri sağlar. Bir işlemin devam etmesine izin verilip verilmeyeceğini belirlemek için kodunuzda bu değerleri kullanın.
User
nesnesinde kullanılabilen özelliklerin listesi için UserRecord
API referansına bakın.
EventContext
nesnesi aşağıdaki özellikleri içerir:
Ad | Açıklama | Örnek |
---|---|---|
locale |
Uygulama yerel ayarı. Yerel ayarı istemci SDK'sını kullanarak veya REST API'de yerel ayar başlığını geçirerek yapabilirsiniz. | fr veya sv-SE |
ipAddress
| Son kullanıcının kaydettirdiği veya oturum açtığı cihazın IP adresi. | 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, etkinlik adı (ör. beforeSignIn veya beforeCreate ) ve kullanılan ilişkili oturum açma yöntemi (ör. Google veya e-posta/şifre) hakkında bilgi sağlar.
|
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 dizesi olarak biçimlendirilir. | Tue, 23 Jul 2019 21:10:57 GMT
|
additionalUserInfo
| Kullanıcı hakkında bilgi içeren bir nesne. |
AdditionalUserInfo
|
credential
| Kullanıcının kimlik bilgileriyle ilgili bilgileri içeren bir nesne. |
AuthCredential
|
Kayıt veya oturum açmayı engelleme
Bir kayıt veya oturum açma girişimini engellemek için işlevinize bir HttpsError
ekleyin. Örneğin:
Node.js
throw new functions.auth.HttpsError('permission-denied');
Aşağıdaki tabloda, oluşturabileceğiniz hatalar ve varsayılan hata mesajları listelenmiştir:
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 |
Eşzamanlılık uyuşmazlığı (ör. okuma-değiştirme-yazma uyuşmazlığı). |
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 alanda olmayan kullanıcıların uygulamanıza kaydolmasını nasıl engelleyeceğiniz gösterilmektedir:
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 bir mesaj kullanıp kullanmadığınızdan bağımsız olarak Cloud Functions, hatayı sarmalayarak istemciye dahili hata olarak döndürür. Örneğin:
throw new functions.auth.HttpsError('invalid-argument', `Unauthorized email user@evil.com}`);
Uygulamanız hatayı yakalamalı ve uygun şekilde ele almalıdır. Ö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('johndoe@example.com', '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.
}
});
Kullanıcıyı değiştirme
Bir kayıt veya oturum açma girişimini engellemek yerine, işlemin devam etmesine izin verebilir ancak Firebase Authentication veritabanına kaydedilen ve istemciye döndürülen User
nesnesini değiştirebilirsiniz.
Bir kullanıcıyı değiştirmek için etkinlik işleyicinizden, değiştirilecek alanları içeren bir nesne döndürün. Aşağıdaki alanları değiştirebilirsiniz:
displayName
disabled
emailVerified
photoUrl
customClaims
sessionClaims
(yalnızcabeforeSignIn
)
sessionClaims
hariç olmak üzere, değiştirilen tüm alanlar Firebase Authentication ürününün veritabanına kaydedilir. Yani, bu alanlar yanıt jetonuna dahil edilir ve kullanıcı oturumları arasında değişmeden kalır.
Aşağıdaki örnekte, varsayılan görünen ad 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
kodunun beforeCreate
sonrasında yürütüleceğini unutmayın. beforeCreate
'te güncellenen kullanıcı alanları beforeSignIn
'te görünür. Her iki etkinlik işleyicide de sessionClaims
dışında bir alan ayarlarsanız beforeSignIn
içinde ayarlanan değer, beforeCreate
öğesinde ayarlanan değerin üzerine yazar. Yalnızca sessionClaims
için geçerli oturumun jeton iddialarına dağıtılır ancak veritabanında kalıcı olarak saklanmaz.
Örneğin, herhangi bir sessionClaims
ayarlanmışsa beforeSignIn
bunları beforeCreate
hak talepleriyle birlikte döndürür ve birleştirilir. Birleştirildiklerinde, sessionClaims
anahtarı customClaims
'daki bir anahtarla eşleşirse jeton hak taleplerinde eşleşen customClaims
anahtarının üzerine sessionClaims
anahtarı yazılır. Ancak gereksiz customClaims
anahtarı, gelecekteki istekler için veritabanında saklanmaya devam eder.
Desteklenen OAuth kimlik bilgileri ve verileri
OAuth kimlik bilgilerini ve verilerini çeşitli kimlik sağlayıcıların engelleme işlevlerine iletebilirsiniz. Aşağıdaki tabloda, her kimlik sağlayıcı için hangi kimlik bilgilerinin ve verilerin desteklendiğini görebilirsiniz:
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 |
Yenileme jetonları
Engelleme işlevinde yenileme jetonu kullanmak için önce Firebase konsolunun Engelleme işlevleri sayfasındaki onay kutusunu seçmeniz gerekir.
Doğrudan kimlik jetonu veya erişim jetonu gibi bir OAuth kimlik bilgisiyle oturum açıldığında yenileme jetonları kimlik sağlayıcılar tarafından döndürülmez. Bu durumda, aynı istemci tarafı OAuth kimlik bilgisi engelleme işlevine iletilir.
Aşağıdaki bölümlerde her bir kimlik sağlayıcı türü ve desteklenen kimlik bilgileri ile verileri açıklanmaktadır.
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 iletilir:
- Kimlik jetonu:
id_token
akışı seçilirse sağlanır. - Erişim jetonu: Kod akışı seçiliyse sağlanır. Kod akışının şu anda yalnızca REST API üzerinden desteklendiğini unutmayın.
- Yenileme jetonu:
offline_access
kapsamı seçiliyse sağlanır.
Örnek:
const provider = new firebase.auth.OAuthProvider('oidc.my-provider');
provider.addScope('offline_access');
firebase.auth().signInWithPopup(provider);
Kullanıcı Google ile oturum açtığında aşağıdaki kimlik bilgileri iletilir:
- No token
- Erişim jetonu
- Yenileme jetonu: Yalnızca aşağıdaki özel parametreler istenirse sağlanır:
access_type=offline
- Kullanıcı daha önce izin verdiyse ve yeni kapsam istenmediyse
prompt=consent
Ö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.
Kullanıcı Facebook ile oturum açtığında aşağıdaki kimlik bilgisi iletilir:
- Erişim jetonu: Başka bir erişim jetonuyla takas edilebilen bir erişim jetonu döndürülür. Facebook tarafından desteklenen farklı erişim jetonu türleri ve bunları uzun ömürlü jetonlar ile nasıl değiştirebileceğiniz hakkında daha fazla bilgi edinin.
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
Kullanıcı Microsoft ile oturum açtığında aşağıdaki kimlik bilgileri iletilir:
- No token
- Erişim jetonu
- Yenileme jetonu:
offline_access
kapsamı seçiliyse engelleme işlevine iletilir.
Ö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 özel parametre veya kapsam olmadan iletilir:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu
Kullanıcı LinkedIn ile oturum açtığında aşağıdaki kimlik bilgisi iletilir:
- Erişim jetonu
Apple
Bir kullanıcı Apple ile oturum açtığında aşağıdaki kimlik bilgileri herhangi bir özel parametre veya kapsam olmadan iletilir:
- Kimlik jetonu
- Erişim jetonu
- Yenileme jetonu
Sık karşılaşılan senaryolar
Aşağıdaki örneklerde, engelleme işlevlerinin 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ın parçası olmayan kullanıcıların uygulamanıza kaydolmasını nasıl engelleyeceğiniz gösterilmektedir:
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-posta adreslerine sahip kullanıcıların kaydını engelleme
Aşağıdaki örnekte, doğrulanmamış e-posta adreslerine sahip kullanıcıların uygulamanıza kaydolmasının nasıl engelleneceği gösterilmektedir:
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ıt sırasında e-posta doğrulamasını zorunlu kılma
Aşağıdaki örnekte, kullanıcının kayıt olduktan sonra e-posta adresini doğrulaması nasıl zorunlu tutulacağı gösterilmektedir:
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 kimlik sağlayıcılardan gelen kullanıcı e-postalarının nasıl doğrulanmış olarak değerlendirileceği gösterilmektedir:
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 iddiaları ayarlama
Aşağıdaki örnekte, özel ve oturum iddialarının 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 ve bunu sonraki isteklerdeki IP adresiyle karşılaştırarak jeton hırsızlığını önleyebilirsiniz. İstek şüpheli görünüyorsa (ör. IP'ler farklı coğrafi bölgelerden geliyorsa) kullanıcıdan tekrar oturum açmasını isteyebilirsiniz.
Kullanıcının oturum açtığı IP adresini izlemek için oturum iddialarını kullanın:
Node.js
exports.beforeSignIn = functions.auth.user().beforeSignIn((user, context) => { return { sessionClaims: { signInIpAddress: context.ipAddress, }, }; });
Bir kullanıcı Firebase Authentication ile kimlik doğrulaması gerektiren kaynaklara erişmeye çalıştığında istekteki IP adresini oturum açmak için kullanılan IP ile karşılaştırın:
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ını inceleme
Aşağıdaki örnekte kullanıcıların profil fotoğraflarının nasıl arındırılacağı gösterilmektedir:
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 temizleme hakkında daha fazla bilgi edinmek için Cloud Vision belgelerini inceleyin.
Kullanıcının kimlik sağlayıcısı OAuth kimlik bilgilerine erişme
Aşağıdaki örnekte, Google ile oturum açmış bir kullanıcı için yenileme jetonunun nasıl alınacağı ve Google Takvim API'lerini çağırmak için nasıl kullanılacağı gösterilmektedir. 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ılma
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ınabilir.
Node.js
const functions = require("firebase-functions/v1");
exports.beforesmsv1 = functions.auth.user().beforeSms((context) => {
if (
context.smsType === "SIGN_IN_OR_SIGN_UP" &&
context.additionalUserInfo.phoneNumber.includes('+91')
) {
return {
recaptchaActionOverride: "ALLOW",
};
}
// Allow users to sign in with recaptcha score greater than 0.5
if (event.additionalUserInfo.recaptchaScore > 0.5) {
return {
recaptchaActionOverride: 'ALLOW',
};
}
// Block all others.
return {
recaptchaActionOverride: 'BLOCK',
}
});