ionic, firebase: Firebase kimlik doğrulamasından TÜM kullanıcı e-postalarını alma

Dec 28 2020

firebase kimlik doğrulama depomdaki TÜM kullanıcıların kullanıcı e-postalarını almaya çalışıyorum, bu bilgiye ihtiyacım var, böylece kullanıcının sistem içinde birbirlerine mesaj göndermesine izin verebilirim. Ionic ile çok tecrübeli değilim, bu yüzden aptalca bir soru ise beni affedin. Oturum açmış kullanıcıların e-postasına ihtiyacım yok, zaten ona erişimim var ama hepsine erişmekte sorun yaşıyorum.

giriş kodu, tam olarak gerekli olup olmadığından emin değil.

// login.page.ts
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
import { NavController } from '@ionic/angular';
import { AuthenticationService } from '../services/authentication.service';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {

  validations_form: FormGroup;
  errorMessage: string = '';

  constructor(

    private navCtrl: NavController,
    private authService: AuthenticationService,
    private formBuilder: FormBuilder

  ) { }

  ngOnInit() {

    this.validations_form = this.formBuilder.group({
      email: new FormControl('', Validators.compose([
        Validators.required,
        Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$')
      ])),
      password: new FormControl('', Validators.compose([
        Validators.minLength(5),
        Validators.required
      ])),
    });
  }


  validation_messages = {
    'email': [
      { type: 'required', message: 'Email is required.' },
      { type: 'pattern', message: 'Please enter a valid email.' }
    ],
    'password': [
      { type: 'required', message: 'Password is required.' },
      { type: 'minlength', message: 'Password must be at least 5 characters long.' }
    ]
  };


  loginUser(value) {
    this.authService.loginUser(value)
      .then(res => {
        console.log(res);
        this.errorMessage = "";
        this.navCtrl.navigateForward('/welcome');
      }, err => {
        this.errorMessage = err.message;
      })
  }

  goToRegisterPage() {
    this.navCtrl.navigateForward('/register');
  }

}

kayıt kodu

// register.page.ts
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
import { AuthenticationService } from '../services/authentication.service';
import { NavController } from '@ionic/angular';

@Component({
  selector: 'app-register',
  templateUrl: './register.page.html',
  styleUrls: ['./register.page.scss'],
})
export class RegisterPage implements OnInit {


  validations_form: FormGroup;
  errorMessage: string = '';
  successMessage: string = '';

  validation_messages = {
    'email': [
      { type: 'required', message: 'Email is required.' },
      { type: 'pattern', message: 'Enter a valid email.' }
    ],
    'password': [
      { type: 'required', message: 'Password is required.' },
      { type: 'minlength', message: 'Password must be at least 5 characters long.' }
    ]
  };

  constructor(
    private navCtrl: NavController,
    private authService: AuthenticationService,
    private formBuilder: FormBuilder
  ) { }

  ngOnInit() {
    this.validations_form = this.formBuilder.group({
      email: new FormControl('', Validators.compose([
        Validators.required,
        Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$')
      ])),
      password: new FormControl('', Validators.compose([
        Validators.minLength(5),
        Validators.required
      ])),
    });
  }

  tryRegister(value) {
    this.authService.registerUser(value)
      .then(res => {
        console.log(res);
        this.errorMessage = "";
        this.successMessage = "Your account has been created. Please log in.";
      }, err => {
        console.log(err);
        this.errorMessage = err.message;
        this.successMessage = "";
      })
  }

  goLoginPage() {
    this.navCtrl.navigateForward('/login');
  }


}

elde etmeye çalıştığım şey şöyle bir şey olabilir

  1. kullanıcı bir listeyi / seçenekleri tıklar
  2. kullanıcı bir e-posta seçer
  3. paylaşmak istediği mesaj içeriğini yazarsa, küçük bir pasaj paylaşacağım
<ion-select>
    <ion-select-option value="email1">email1</ion-select-option>
    <ion-select-option value="email2">email2</ion-select-option>
    <ion-select-option value="email3">email3</ion-select-option>
    <ion-select-option value="email4">email4/ion-select-option>
  </ion-select> //probably will use *ngFor to do this.

kimlik doğrulama hizmeti ekran görüntüsü

Yanıtlar

FrankvanPuffelen Dec 28 2020 at 00:42

İstemci tarafı Firebase Authentication SDK'da, sistemdeki tüm kullanıcıların e-posta adreslerini almanın bir yolu yoktur, çünkü bu potansiyel bir güvenlik riski oluşturacaktır.

Uygulamanızın bu işleve ihtiyacı varsa, onu kendiniz oluşturmanız gerekir. En yaygın iki seçenek şunlardır:

  1. Bu tür bir işleve sahip olan Firebase Admin SDK'yı kullanan özel bir sunucu tarafı API'si uygulayın.
  2. Gerekli kullanıcı verilerini Firebase'in Realtime Database veya Cloud Firestore gibi bir veritabanında depolayın ve müşterinin bunlara orada erişmesini sağlayın.

Her iki durumda da uygulamanız , güvenlik endişesini gideren, kullanıcılarınızla ilgili hangi verilerin ifşa edildiğini kontrol eder.

Ayrıca bkz:

  • Firebase Auth kullanarak kaydolan kullanıcıların bir listesini alma
  • AngularFire ile kullanıcı e-posta adreslerinin listesini alın
  • Firebase'de kayıtlı tüm kimlik doğrulama e-postaları nasıl alınır?