Firebase şifre değiştirirken yapmanız gerekenler

Projenizde Firebase Authentication kullanıyorsanız kullanıcılarınızın şifrelerini değiştirebilmelerini sağlamak için bir menü yapmanız gerekecektir. Burada firebase’in bazı  güvenlik önlemleri devreye giriyor. Bu yazımızda bu işlemleri nasıl yapacağımıza değineceğiz.

Firebase Re-authentication Nedir?

Temel olarak yapmamız gereken iş kullanıcıyı tekrar authentication yaptırmak. Bunun için kullanıcıdan şifresini istememiz gerekiyor. Daha sonra firebase’de bulunan reauthenticateAndRetrieveDataWithCredential fonksiyonu ile tekrar login edip token bilgisi alıyoruz. Böylece Firebase şifre değişikliği yapmak isteyenin gerçek kullanıcı olduğuna emin olarak işlemi yapmaya izin veriyor. Aksi halde hata alabilirsiniz.

Firebase Re-authentication Nasıl Yapılır?

Şimdi işlemlerin kod tarafından nasıl yapılabileceğini inceleyelim. Ben örnek kodları Angular olarak paylaşacağım. Siz kendi kullanacağınız şekle çevirebilirsiniz. Zaten firebase kütüphaneleri aynı sayılır.

  const user = this.afAuth.auth.currentUser;
  const credentials = firebase.auth.EmailAuthProvider.credential(
    user.email,
    this.oldPassword
  );

Yukarıdaki kod bloğunda currentUser ile mevcut kullanıcı bilgisine ulaşıyoruz.
EmailAuthProvider.credential(email, password) fonksiyonu sayesinde  eski şifreyi vererek yeniden login işlemi yaptırmış oluyoruz. Bu fonksiyon bize yeni bir crendentials sonucu dönüyor.

 

user.reauthenticateWithCredential(credentials).then( () => {
  this.user.updatePassword(this.newPassword).then( () => {
    console.log('Şifreniz başarıyla güncellendi!');
  });
});

Burada ise reauthenticateWithCredential fonksiyonuna biraz önce elde ettiğimiz credential bilgisini veriyoruz. Eğer doğrulama işlemi olduysa then kısmına düşüyor. Burada artık updatePassword fonksiyonu sayesinde şifre değiştirme işlemini yapabiliriz.

Not: bu işlemlerin aynı şekilde kullanıcıyı silerken, email adresini düzenlerken de yapılması gerekmektedir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir