ionic, firebase: So erhalten Sie ALLE Benutzer-E-Mails von der Firebase-Authentifizierung
Ich versuche, die Benutzer-E-Mail von ALLEN Benutzern zu erhalten, die sich in meinem Firebase-Authentifizierungsspeicher befinden. Ich benötige diese Informationen, damit Benutzer sich innerhalb des Systems gegenseitig Nachrichten senden können. Ich bin nicht sehr erfahren mit Ionen, also verzeihen Sie mir, wenn es eine dumme Frage ist. Ich brauche die E-Mail des angemeldeten Benutzers nicht, ich habe bereits Zugriff darauf, habe aber Probleme, auf alle zuzugreifen.
Login-Code, nicht sicher, ob genau benötigt.
// 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');
}
}
der Registercode
// 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');
}
}
Was ich versuche zu bekommen, wäre so etwas wie
- Benutzer klickt auf eine Liste / Optionen
- Benutzer wählt eine E-Mail
- Wenn Sie einen Nachrichteninhalt eingeben, den er / sie teilen möchte, werde ich einen kleinen Ausschnitt teilen
<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.
Screenshot des Authentifizierungsdienstes
Antworten
Das clientseitige Firebase-Authentifizierungs-SDK bietet keine Möglichkeit, die E-Mail-Adressen aller Benutzer im System abzurufen, da dies ein potenzielles Sicherheitsrisiko darstellen würde.
Wenn Ihre App diese Funktionalität benötigt, müssen Sie sie selbst erstellen. Die zwei häufigsten Optionen sind:
- Implementieren Sie eine benutzerdefinierte serverseitige API, die das Firebase Admin SDK verwendet, das über solche Funktionen verfügt.
- Speichern Sie die erforderlichen Benutzerdaten in einer Datenbank, z. B. in der Echtzeitdatenbank von Firebase oder im Cloud Firestore, und lassen Sie den Client dort darauf zugreifen.
In beiden Fällen steuert Ihre App , welche Daten über Ihre Benutzer verfügbar gemacht werden, wodurch das Sicherheitsrisiko behoben wird.
Siehe auch:
- Abrufen einer Liste von Benutzern, die sich mit Firebase Auth registriert haben
- Liste der Benutzer-E-Mail-Adressen mit AngularFire abrufen
- So rufen Sie alle registrierten Authentifizierungs-E-Mails in Firebase ab