无法读取Angular和Firebase身份验证中未定义的属性“用户”

运行猛禽

首次使用Firebase,并尝试在Angular(v5)应用程序中设置电子邮件和Google身份验证。按照教程(https://angularfirebase.com/lessons/google-user-auth-with-firestore-custom-data/#Step-5-User-Profile)进行操作时,出现错误:

ERROR TypeError: Cannot read property 'user' of undefined

错误来自模板:

login.component.html

<div *ngIf="auth.user | async; then authenticated else guest">
  <!-- template will replace this div -->
</div>
<!-- User NOT logged in -->
<ng-template #guest>
  <h3>Howdy, GUEST</h3>
  <p>Login to get started...</p>

  <button (click)="auth.googleLogin()">
    <i class="fa fa-google"></i> Connect Google
  </button>
</ng-template>
<!-- User logged in -->
<ng-template #authenticated>
  <div *ngIf="auth.user | async as user">
    <h3>Howdy, {{ user.displayName }}</h3>
    <img  [src]="user.photoURL">
    <p>UID: {{ user.uid }}</p>
    <p>Favorite Color: {{ user?.favoriteColor }} </p>
    <button (click)="auth.signOut()">Logout</button>
  </div>
</ng-template>

login.component.ts

import {Component} from '@angular/core';
import {AuthService} from '../auth/auth.service';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent {

  constructor(public authService: AuthService) {
  }
}

身份验证服务

import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
import * as firebase from 'firebase/app';
import {AngularFireAuth} from 'angularfire2/auth';
import {AngularFirestore, AngularFirestoreDocument} from 
'angularfire2/firestore';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap'

interface User {
  uid: string;
  email: string;
  photoURL?: string;
  displayName?: string;
  favoriteColor?: string;
}

@Injectable()
export class AuthService {

  user: Observable<User>;

  constructor(private afAuth: AngularFireAuth,
              private afs: AngularFirestore,
              private router: Router) {
    //// Get auth data, then get firestore user document || null
    this.user = this.afAuth.authState
      .switchMap(user => {
        if (user) {
          return this.afs.doc<User>(`users/${user.uid}`).valueChanges()
        } else {
          return Observable.of(null)
        }
      })
  }
  googleLogin() {
    const provider = new firebase.auth.GoogleAuthProvider()
    return this.oAuthLogin(provider);
  }
  private oAuthLogin(provider) {
    return this.afAuth.auth.signInWithPopup(provider)
      .then((credential) => {
        this.updateUserData(credential.user)
      })
  }
  private updateUserData(user) {
    // Sets user data to firestore on login
    const userRef: AngularFirestoreDocument<any> = 
    this.afs.doc(`users/${user.uid}`);
    const data: User = {
      uid: user.uid,
      email: user.email,
      displayName: user.displayName,
      photoURL: user.photoURL
    };
    return userRef.set(data)
  }
  signOut() {
    this.afAuth.auth.signOut().then(() => {
      this.router.navigate(['/']);
    });
  }
}

这个SO问题似乎相似,但是不确定答案如何应用于我的问题:firebase onAuth()抛出:TypeError无法读取未定义的属性“ auth”以及如何解决我的问题。

这是错误的屏幕截图:

在此处输入图片说明

运行猛禽

Yurzui的上述解决方案解决了该问题。

我改变了constructor(public authService: AuthService)constructor(public auth: AuthService)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular Firebase 身份验证服务 - 用户始终未定义

TypeError:无法读取未定义的Youtube Data API身份验证NodeJS的属性'redirect_uris'

无法读取未定义的属性“身份验证”-使用帐户工具包解析服务器

未定义和用户身份验证错误的 setState。试过.bind(this)。尝试过 fatpipe... 无法正常工作

无法在表单验证中读取未定义的属性“值”

无法在 Angular 中读取未定义的属性(读取“订阅”)

无法读取未定义-Angular,Firebase的属性“ push”

无法读取未定义的属性“forEach” - Firebase 和 Javascript

无法读取 Angular 2 中未定义的属性“用户名”

Firebase身份验证错误:未定义名称“ auth”

Firebase 身份验证为 createUserWithEmailAndPassword 返回未定义

反应本机 Firebase 身份验证返回未定义

错误:无法读取 ionic 4 和 firebase 中未定义的属性“纬度”

无法读取Angular 2中未定义的属性“错误”?

无法读取 Angular 11 中未定义的属性“推送”

无法读取Angular中未定义的属性“ navigate”

Angular无法读取组件/表单中未定义的属性

无法读取 Angular 中未定义的属性“RecaptchaVerifier”

无法在Angular中读取未定义数组的属性'filter'

无法读取 Angular 中未定义的属性“单位”

Angular无法读取未定义的属性

无法读取未定义 Angular 的属性

在Ruby on Rails中未定义的方法“身份验证”?

未定义类型身份验证

TypeError:添加自定义验证器时,无法读取未定义Angular的属性'indexOf'

使用 Firebase 转换匿名用户:无法读取未定义的属性“getAuthResponse”

角度-表单验证-无法读取未定义的属性“名称”

redux 表单验证 - 无法读取未定义的属性“某些”

角2:无法读取未定义的属性“验证器”