ionic, firebase: Cómo obtener TODOS los correos electrónicos de los usuarios de la autenticación de base de fuego
Estoy tratando de obtener el correo electrónico de TODOS los usuarios que están en mi tienda de autenticación de base de fuego, necesito esta información para poder permitir que los usuarios se envíen mensajes entre sí dentro del sistema. No tengo mucha experiencia con iónico, así que perdóname si es una pregunta estúpida. No necesito el correo electrónico de los usuarios registrados, ya tengo acceso a él, pero tengo problemas para acceder a todos ellos.
código de inicio de sesión, no estoy seguro de si es exactamente necesario.
// 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');
}
}
código de registro
// 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');
}
}
lo que estoy tratando de conseguir sería algo como
- el usuario hace clic en una lista / opciones
- el usuario elige un correo electrónico
- escribe cualquier contenido de mensaje que quiera compartir, compartiré un pequeño fragmento
<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.
captura de pantalla del servicio de autenticación
Respuestas
No hay forma en el SDK de autenticación de Firebase del lado del cliente para obtener las direcciones de correo electrónico de todos los usuarios en el sistema, ya que eso sería un riesgo de seguridad potencial.
Si su aplicación necesita esta funcionalidad, tendrá que crearla usted mismo. Las dos opciones más comunes son:
- Implemente una API personalizada del lado del servidor que use el SDK de Firebase Admin, que tiene dicha funcionalidad.
- Almacene los datos de usuario necesarios en una base de datos, como la base de datos en tiempo real de Firebase o Cloud Firestore, y haga que el cliente acceda a ellos allí.
En ambos casos, su aplicación controla qué datos se exponen sobre sus usuarios, lo que aborda el problema de seguridad.
Ver también:
- Recuperando una lista de usuarios que se han registrado usando Firebase Auth
- Obtenga una lista de las direcciones de correo electrónico de los usuarios con AngularFire
- Cómo recuperar todos los correos electrónicos de autenticación registrados en firebase