ionic, firebase: Cara mendapatkan SEMUA email pengguna dari otentikasi firebase

Dec 28 2020

Saya mencoba untuk mendapatkan email pengguna dari SEMUA pengguna yang ada di toko otentikasi firebase saya, saya memerlukan informasi ini sehingga saya dapat mengizinkan pengguna untuk saling mengirim pesan di dalam sistem. im tidak terlalu berpengalaman dengan ion jadi maafkan saya jika itu pertanyaan bodoh. saya tidak memerlukan email pengguna yang masuk, saya sudah memiliki akses ke sana tetapi mengalami masalah saat mengakses semuanya.

kode masuk, tidak yakin apakah benar-benar diperlukan.

// 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');
  }

}

mendaftar kode

// 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');
  }


}

apa yang saya coba dapatkan akan menjadi sesuatu seperti

  1. pengguna mengklik daftar / opsi
  2. pengguna memilih satu email
  3. ketik konten pesan apa pun yang ingin dia bagikan, saya akan membagikan potongan kecil
<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.

tangkapan layar layanan otentikasi

Jawaban

FrankvanPuffelen Dec 28 2020 at 00:42

Tidak ada cara dalam Firebase Authentication SDK sisi klien untuk mendapatkan alamat email dari semua pengguna di sistem, karena itu akan menjadi potensi risiko keamanan.

Jika aplikasi Anda membutuhkan fungsionalitas ini, Anda harus membuatnya sendiri. Dua opsi paling umum adalah:

  1. Terapkan API sisi server khusus yang menggunakan Firebase Admin SDK, yang memiliki fungsi seperti itu.
  2. Simpan data pengguna yang diperlukan dalam database, seperti Firebase's Realtime Database atau Cloud Firestore, dan minta klien mengaksesnya di sana.

Dalam kedua kasus tersebut, aplikasi Anda mengontrol data apa yang diungkapkan tentang pengguna Anda, yang menangani masalah keamanan.

Lihat juga:

  • Mengambil daftar pengguna yang telah terdaftar menggunakan Firebase Auth
  • Dapatkan daftar alamat email pengguna dengan AngularFire
  • Cara mengambil semua email autentikasi terdaftar di firebase