ionic, firebase : firebase 인증에서 모든 사용자 이메일을 가져 오는 방법

Dec 28 2020

내 firebase 인증 저장소에있는 모든 사용자의 사용자 이메일을 가져 오려고합니다. 사용자가 시스템 내에서 서로에게 메시지를 보낼 수 있도록이 정보가 필요합니다. 이온에 대한 경험이 많지 않으므로 어리석은 질문이라면 용서해주십시오. 로그인 한 사용자 이메일이 필요하지 않습니다. 이미 이메일에 액세스 할 수 있지만 모든 이메일에 액세스하는 데 문제가 있습니다.

로그인 코드, 정확히 필요한지 확실하지 않습니다.

// 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

클라이언트 측 Firebase 인증 SDK에서는 시스템에있는 모든 사용자의 이메일 주소를 가져올 수있는 방법이 없습니다. 보안 위험이있을 수 있습니다.

앱에이 기능이 필요한 경우 직접 빌드해야합니다. 가장 일반적인 두 가지 옵션은 다음과 같습니다.

  1. 이러한 기능이있는 Firebase Admin SDK를 사용하는 맞춤 서버 측 API를 구현합니다.
  2. Firebase의 실시간 데이터베이스 또는 Cloud Firestore와 같은 데이터베이스에 필요한 사용자 데이터를 저장하고 클라이언트가 해당 데이터에 액세스하도록합니다.

두 경우 모두 이 사용자에 대해 노출되는 데이터를 제어하여 보안 문제를 해결합니다.

참조 :

  • Firebase Auth를 사용하여 등록한 사용자 목록 가져 오기
  • AngularFire로 사용자 이메일 주소 목록 가져 오기
  • Firebase에 등록 된 모든 인증 이메일을 가져 오는 방법