Kullanıcılarınızın Google Hesaplarını kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz. Google oturum açma akışını yürütmek için Firebase SDK'sını kullanabilirsiniz. Google ile Oturum Açma kitaplığını kullanarak oturum açma akışını manuel olarak elde edilen kimlik jetonunu Firebase'e iletmenizi sağlar.
Başlamadan önce
- Firebase'i JavaScript projenize ekleyin.
- Firebase konsolunda Google'ı oturum açma yöntemi olarak etkinleştirin:
- Firebase konsolunda şunu açın: Kimlik Doğrulama bölümüne gidin.
- Oturum açma yöntemi sekmesinde, Google ile oturum açma yöntemini etkinleştirin ve Kaydet'i tıklayın.
Oturum açma akışını Firebase SDK'sı ile yönetme
Bir web uygulaması oluşturuyorsanız kullanıcılarınızın kimliğini doğrulamanın en kolay yolu oturum açma akışını yönetebilmek için Google Hesaplarını Firebase JavaScript SDK'sı. (Node.js'de bir kullanıcının kimliğini doğrulamak istiyorsanız veya tarayıcı harici başka bir ortam kullanıyorsanız oturum açma akışını manuel olarak gerçekleştirmeniz gerekir.)
Oturum açma akışını Firebase JavaScript SDK ile yönetmek için şu adımları uygulayın: için şu adımları izleyin:
- Google provider nesnesinin bir örneğini oluşturun:
import { GoogleAuthProvider } from "firebase/auth"; const provider = new GoogleAuthProvider();
var provider = new firebase.auth.GoogleAuthProvider();
- İsteğe bağlı: Oluşturduğunuz ek OAuth 2.0 kapsamlarını belirtin
kimlik doğrulama sağlayıcısından istekte bulunmak istiyorum. Kapsam eklemek için
addScope
Örneğin:provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
- İsteğe bağlı: Sağlayıcının OAuth akışını kullanıcının tercih ettiği şekilde yerelleştirmek için
dil ayarını, ilgili özel OAuth parametrelerini açıkça iletmeden kullanılan bir dil kullanıyorsanız
kodunu ekleyin. Örneğin:
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
- İsteğe bağlı: Ek özel OAuth sağlayıcı parametreleri belirtin
onay kutusunu işaretleyin. Özel parametre eklemek için şu çağrıyı yapın:
Başlatılan sağlayıcıda, anahtarı içeren bir nesneyle birlikte
setCustomParameters
OAuth sağlayıcı dokümanlarında ve ilgili değerde belirtildiği şekilde olmalıdır. Örneğin:provider.setCustomParameters({ 'login_hint': 'user@example.com' });
provider.setCustomParameters({ 'login_hint': 'user@example.com' });
- Google sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Şunları yapabilirsiniz:
kullanıcılarınızdan Google Hesapları ile oturum açmalarını istemek için
oturum açma sayfasına yönlendirilirsiniz. Yönlendirme yöntemi
mobil cihazlarda tercih edilir.
- Pop-up pencereyle oturum açmak için
signInWithPopup
numaralı telefonu arayın:import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // This gives you a Google Access Token. You can use it to access the Google API. const credential = GoogleAuthProvider.credentialFromResult(result); const token = credential.accessToken; // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GoogleAuthProvider.credentialFromError(error); // ... });
firebase.auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a Google Access Token. You can use it to access the Google API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
Ayrıca, hataları yakalayıp işleyebilirsiniz. Hata kodlarının listesi için Kimlik Doğrulama Referans Belgeleri'ne göz atın.
- Oturum açma sayfasına yönlendirerek oturum açmak için
signInWithRedirect
çağırın: "signInWithRedirect" özelliğini kullanırken en iyi uygulamaları izleyin.import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
firebase.auth().signInWithRedirect(provider);
getRedirectResult
:import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // This gives you a Google Access Token. You can use it to access Google APIs. const credential = GoogleAuthProvider.credentialFromResult(result); const token = credential.accessToken; // The signed-in user info. const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GoogleAuthProvider.credentialFromError(error); // ... });
firebase.auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a Google Access Token. You can use it to access the Google API. var token = credential.accessToken; // ... } // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
- Pop-up pencereyle oturum açmak için
farklı kimlik bilgileriyle var olan hesap hatalarını ele alma
Firebase konsolunda E-posta adresi başına bir hesap ayarını etkinleştirdiyseniz
Kullanıcı daha önce kayıtlı olan e-postayla bir sağlayıcıda (ör. Google) oturum açmaya çalıştığında
başka bir Firebase kullanıcısının sağlayıcısı (ör. Facebook) için mevcutsa
auth/account-exists-with-different-credential
,
AuthCredential
nesnesi (Google kimliği jetonu). Oturum açma işlemini
kullanıcının ilk olarak mevcut sağlayıcıyla (Facebook) oturum açması ve ardından
eski AuthCredential
(Google kimliği jetonu).
Pop-up modu
signInWithPopup
kullanıyorsanız
Aşağıdakine benzer bir kodla auth/account-exists-with-different-credential
hata
örnek:
import { getAuth, linkWithCredential, signInWithPopup, GoogleAuthProvider, } from "firebase/auth"; try { // Step 1: User tries to sign in using Google. let result = await signInWithPopup(getAuth(), new GoogleAuthProvider()); } catch (error) { // Step 2: User's email already exists. if (error.code === "auth/account-exists-with-different-credential") { // The pending Google credential. let pendingCred = error.credential; // Step 3: Save the pending credential in temporary storage, // Step 4: Let the user know that they already have an account // but with a different provider, and let them choose another // sign-in method. } } // ... try { // Step 5: Sign the user in using their chosen method. let result = await signInWithPopup(getAuth(), userSelectedProvider); // Step 6: Link to the Google credential. // TODO: implement `retrievePendingCred` for your app. let pendingCred = retrievePendingCred(); if (pendingCred !== null) { // As you have access to the pending credential, you can directly call the // link method. let user = await linkWithCredential(result.user, pendingCred); } // Step 7: Continue to app. } catch (error) { // ... }
Yönlendirme modu
Bu hata, yönlendirme modunda benzer bir şekilde ele alınır. Beklemedeki hesabın kimlik bilgisi sayfa yönlendirmeleri arasında önbelleğe alınmalıdır (örneğin, oturum depolaması kullanılarak).
Gelişmiş: Oturum açma akışını manuel olarak yönetme
Ayrıca, şu adımları izleyerek bir Google Hesabı kullanarak Firebase ile kimlik doğrulaması yapabilirsiniz: Google ile Oturum Açma kitaplığını kullanarak oturum açma akışı:
- Şu adımları uygulayarak Google ile Oturum Açma özelliğini uygulamanıza entegre edin: entegrasyon kılavuzuna bakın. Google ile Oturum Açma özelliğini, Firebase projeniz için oluşturulan Google İstemci Kimliği ile yapılandırdığınızdan emin olun. Projenizin Google İstemci Kimliği'ni Projenizin Developers Console Kimlik Bilgileri sayfasında bulabilirsiniz.
- Oturum açma sonucu geri çağrısında, Google kimlik doğrulama yanıtındaki kimlik jetonunu bir Firebase kimlik bilgisi ile değiştirin ve Firebase ile kimlik doğrulamak için bu jetonu kullanın:
function handleCredentialResponse(response) { // Build Firebase credential with the Google ID token. const idToken = response.credential; const credential = GoogleAuthProvider.credential(idToken); // Sign in with credential from the Google user. signInWithCredential(auth, credential).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.email; // The credential that was used. const credential = GoogleAuthProvider.credentialFromError(error); // ... }); }
Gelişmiş: Node.js'de Firebase ile kimlik doğrulama
Node.js uygulamasında Firebase ile kimlik doğrulamak için:
- Kullanıcının Google Hesabı ile oturum açın ve kullanıcının Google kimliğini alın
jeton. Bunu birkaç şekilde yapabilirsiniz. Örneğin:
- Uygulamanızda bir tarayıcı kullanıcı arabirimi varsa açıklandığı şekilde Google ile Oturum Açma'yı kullanın
Genel kullanıcı başına
oturum açma akışı manuel olarak bölümüne bakın. Kimlik doğrulamadan Google kimliği jetonunu alma
yanıt:
Ardından bu jetonu Node.js uygulamanıza gönderin.var id_token = googleUser.getAuthResponse().id_token
- Uygulamanız, sınırlı giriş özelliklerine sahip bir cihazda çalışıyorsa (ör. için Google TV'ler ve Cihazlar için Oturum Açma akışı.
- Uygulamanızda bir tarayıcı kullanıcı arabirimi varsa açıklandığı şekilde Google ile Oturum Açma'yı kullanın
Genel kullanıcı başına
oturum açma akışı manuel olarak bölümüne bakın. Kimlik doğrulamadan Google kimliği jetonunu alma
yanıt:
- Kullanıcının Google kimlik jetonunu aldıktan sonra bu jetonu kullanarak Kimlik Bilgisi oluşturmak için
nesnesini tanımlayın ve ardından kimlik bilgileriyle kullanıcının oturum açmasını sağlayın:
import { getAuth, signInWithCredential, GoogleAuthProvider } from "firebase/auth"; // Build Firebase credential with the Google ID token. const credential = GoogleAuthProvider.credential(id_token); // Sign in with credential from the Google user. const auth = getAuth(); signInWithCredential(auth, credential).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = GoogleAuthProvider.credentialFromError(error); // ... });
// Build Firebase credential with the Google ID token. var credential = firebase.auth.GoogleAuthProvider.credential(id_token); // Sign in with credential from the Google user. firebase.auth().signInWithCredential(credential).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
Chrome uzantılarında Firebase ile kimlik doğrulama
Bir Chrome uzantı uygulaması oluşturuyorsanız daha fazla bilgi için Ekran dışı dokümanlar rehberi.
Google ile Oturum Açma için yönlendirme alan adını özelleştirme
Firebase, proje oluşturulurken projeniz için benzersiz bir alt alan sağlar:
https://my-app-12345.firebaseapp.com
Bu, OAuth'ta oturum açmak için yönlendirme mekanizması olarak da kullanılır. Bu alan adının desteklenen tüm OAuth sağlayıcıları için izin verilir. Ancak bu, kullanıcıların alan adınızda oturum açmanız gerekir: https://my-app-12345.firebaseapp.com adresine gidin.
Alt alan adınızın gösterilmesini önlemek için Firebase Hosting ile özel bir alan oluşturabilirsiniz:
- Şuradaki 1 ila 3. adımları uygulayın: Hosting için alanınızı ayarlayın. Doğrulama işlemi sırasında Hosting, özel alanınız için bir SSL sertifikası sağlar.
- Özel alan adınızı
Firebase konsolu:
auth.custom.domain.com
. - Google Developers Console veya OAuth kurulum sayfasında yönlendirme sayfasının URL'sini beyaz listeye ekleyin.
Bu URL'ye özel alanınızdan erişebilirsiniz:
https://auth.custom.domain.com/__/auth/handler
- JavaScript kitaplığını başlattığınızda özel alan adınızı
authDomain
alanı:var config = { apiKey: '...', // Changed from '
PROJECT_ID .firebaseapp.com'. authDomain: 'auth.custom.domain.com', databaseURL: 'https://PROJECT_ID .firebaseio.com', projectId: 'PROJECT_ID ', storageBucket: ' ', messagingSenderId: 'PROJECT_ID .firebasestorage.appSENDER_ID ' }; firebase.initializeApp(config);
Sonraki adımlar
Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.
-
Uygulamalarınızda, kullanıcınızın kimlik doğrulama durumunu öğrenmenin önerilen yolu
Auth
nesnesine bir gözlemci ayarlayın. Ardından, kullanıcınınUser
nesnesindeki temel profil bilgilerini içerir. Görüntüleyin Kullanıcıları Yönetme Firebase Realtime Database ve Cloud Storage içinde Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz:
auth
değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.
Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.
Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın
signOut
:
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });