Я пытаюсь получить текущего пользователя и хочу установить пользовательские значения для получения. В конструкторе я вижу консоль, которая возвращает проверенную электронную почту в true, но когда я пытаюсь установить ее, получатель показывает, что не удается прочитать свойство 'emailVerified' из неопределенного. Пожалуйста, найдите мой код ниже.

import { Injectable } from "@angular/core";
import { AngularFireAuth } from "@angular/fire/auth";
import * as firebase from "firebase/app";
//import 'rxjs/add/operator/toPromise';

@Injectable({
  providedIn: "root"
})
export class AuthService {

  userData: any; // Save logged in user data

  constructor(public afAuth: AngularFireAuth) {

    /* logged in and setting up null when logged out */
    this.afAuth.authState.subscribe(user => {
      if (user) {
        this.userData = user;
        console.log(this.userData, this.userData.emailVerified)

      } else {
        this.userData = null;
      }
    })
  }

  // Returns true when user is looged in and email is verified
  get isLoggedIn(): boolean {
    const user = this.userData;
    return ( user !== null && user.emailVerified !== false ) ? true : false;
  }
}
0
RAHUL KUNDU 26 Дек 2019 в 21:00

2 ответа

Возвращает true, когда пользователь вошел в систему и подтвердил адрес электронной почты:

  get isLoggedIn(): boolean { 
    const user = this.userData;
    if(user === null || user === undefined) return false
    return user.emailVerified;
  }
1
Arun Vinoth - MVP 26 Дек 2019 в 21:35
1
Я предполагаю, что первая проверка должна быть typeof user == 'undefined' , чтобы избежать ошибок.
 – 
Triby
26 Дек 2019 в 21:17

В отличие от обычных функций, функции стрелок не имеют своих собственных this, так как вы не можете получить доступ к клавише emailVerified и выдает ошибку типа Cannot read property 'emailVerified' of undefined

Пожалуйста, проверьте этот код, попробуйте еще раз:

/* logged in and setting up null when logged out */
    this.afAuth.authState.subscribe( function(user) {
      if (user) {
        this.userData = user;
        console.log(this.userData, this.userData.emailVerified)

      } else {
        this.userData = null;
      }
    })

Я думаю это сработает

0
Bhargav Tailor 26 Дек 2019 в 21:18