ionic, firebase: Comment obtenir TOUS les e-mails des utilisateurs à partir de l'authentification Firebase
J'essaie d'obtenir l'adresse e-mail de TOUS les utilisateurs qui se trouvent dans mon magasin d'authentification Firebase, j'ai besoin de ces informations pour permettre aux utilisateurs de se transmettre des messages dans le système. Im pas très expérimenté avec ionique alors pardonnez-moi si c'est une question stupide. Je n'ai pas besoin du courrier électronique des utilisateurs connectés, j'y ai déjà accès mais j'ai du mal à y accéder tous.
code de connexion, je ne sais pas s'il est exactement nécessaire.
// 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');
}
}
code d'enregistrement
// 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');
}
}
ce que j'essaye d'obtenir serait quelque chose comme
- l'utilisateur clique sur une liste / des options
- l'utilisateur choisit un e-mail
- tape tout contenu de message qu'il / elle souhaite partager, je partagerai un petit extrait
<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.
capture d'écran du service d'authentification
Réponses
Il n'existe aucun moyen dans le SDK d'authentification Firebase côté client d'obtenir les adresses e-mail de tous les utilisateurs du système, car cela constituerait un risque de sécurité potentiel.
Si votre application a besoin de cette fonctionnalité, vous devrez la créer vous-même. Les deux options les plus courantes sont:
- Implémentez une API côté serveur personnalisée qui utilise le SDK Firebase Admin, qui possède une telle fonctionnalité.
- Stockez les données utilisateur nécessaires dans une base de données, telle que la base de données en temps réel de Firebase ou Cloud Firestore, et laissez le client y accéder.
Dans les deux cas, votre application contrôle les données exposées sur vos utilisateurs, ce qui résout le problème de sécurité.
Regarde aussi:
- Récupération d'une liste d'utilisateurs qui se sont enregistrés à l'aide de Firebase Auth
- Obtenez la liste des adresses e-mail des utilisateurs avec AngularFire
- Comment récupérer tous les e-mails d'authentification enregistrés dans Firebase