ionic, firebase: как получить ВСЕ электронные письма пользователей от аутентификации firebase

Dec 28 2020

Я пытаюсь получить электронную почту ВСЕХ пользователей, которые находятся в моем хранилище аутентификации firebase, мне нужна эта информация, чтобы я мог позволить пользователю отправлять сообщения друг другу в системе. Я не очень опытен с ionic, так что простите меня, если это глупый вопрос. Мне не нужна электронная почта вошедших в систему пользователей, у меня уже есть к ней доступ, но у меня проблемы с доступом ко всем из них.

код входа, не уверен, нужен ли он именно.

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

}

регистрационный код

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


}

то, что я пытаюсь получить, будет что-то вроде

  1. пользователь щелкает список / параметры
  2. пользователь выбирает одно электронное письмо
  3. вводит любое содержание сообщения, которым он / она хочет поделиться, я поделюсь небольшим фрагментом
<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.

снимок экрана службы аутентификации

Ответы

FrankvanPuffelen Dec 28 2020 at 00:42

В клиентском SDK Firebase Authentication нет возможности получить адреса электронной почты всех пользователей в системе, так как это может представлять потенциальную угрозу безопасности.

Если вашему приложению нужна эта функция, вам придется создать ее самостоятельно. Два наиболее распространенных варианта:

  1. Реализуйте настраиваемый серверный API, который использует Firebase Admin SDK, который имеет такие функции.
  2. Сохраните необходимые пользовательские данные в базе данных, такой как Firebase Realtime Database или Cloud Firestore, и предоставьте клиенту доступ к ним там.

В обоих случаях ваше приложение контролирует, какие данные о ваших пользователях раскрываются, что решает проблему безопасности.

Также см:

  • Получение списка пользователей, которые зарегистрировались с помощью Firebase Auth
  • Получите список адресов электронной почты пользователей с помощью AngularFire
  • Как получить все зарегистрированные электронные письма для аутентификации в firebase