【问题标题】:Getting users data from firebase database doesn't work after authentication身份验证后无法从 firebase 数据库获取用户数据
【发布时间】:2020-12-07 15:12:27
【问题描述】:

我是 angular 和 firebase 的新手,并且仅在成功的身份验证后才尝试将用户数据放入表中 - 如果您正确登录,该表会显示数据,如果没有,您将看不到这些数据。我尝试在我的 AuthService 中进行简单的 firebase 登录和注销:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { AngularFireAuth } from '@angular/fire/auth';
import { Router } from '@angular/router';

import * as firebase from 'firebase/app';

@Injectable({
  providedIn: 'root',
})
export class AuthService {
  constructor(private router: Router, private fireAuth: AngularFireAuth) {}

  onLogin(email: string, password: string) {
    firebase
      .auth()
      .signInWithEmailAndPassword(email, password)
      .then(function () {
        console.log('Succes');
      })
      .catch(function (error) {
        console.log(error);
      });
  }

  async onLogout() {
    try {
      await firebase.auth().signOut();
      this.router.navigate(['./']);
    } catch (error) {
      console.log(error);
    }
  }
}

这是我的 UserService 负责在表格中显示用户:

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { take } from 'rxjs/operators';
import { User } from 'src/app/models/user.model';
import { HttpClient } from '@angular/common/http';
@Injectable({
  providedIn: 'root',
})
export class UserService {
  constructor(private http: HttpClient) {}

  fetchUsers() {
    let result = new Subject<User[]>();
    this.http
      .get('https://fir-login-1416c.firebaseio.com/users.json')
      .subscribe((users) => {
        let usersAr = Object.keys(users).map((id) => new User(users[id]));
        result.next(usersAr);
      });

    return result.pipe(take(1));
  }

  addUser(user: User) {
    let postData: User = user;

    this.http
      .post<{ name: string }>(
        'https://fir-login-1416c.firebaseio.com/users.json',
        postData,
        {
          observe: 'response',
        }
      )
      .subscribe(
        (responseData) => {
          console.log(responseData.body.name);
        },
        (error) => {
          console.log(error);
        }
      );
    this.fetchUsers();
  }

  deleteUser() {
    // Later
  }
}

我的 firebase 数据库规则如下所示:

{
  "rules": {
    ".write": "auth !== null",
    ".read": "auth !== null"
  }
}

但问题是当我使用正确的数据登录并导航到用户表的页面时,我看到空表和控制台显示 this errors。 看起来身份验证根本不起作用,或者我只是做错了什么。 如果您对如何执行此操作有任何建议,请给我 :) 谢谢!

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    您需要在请求中发送某种授权标头。否则数据库并不真正知道您已通过身份验证。

    我建议使用 AngularFire 不仅用于身份验证,还用于获取数据。

    【讨论】:

    • 谢谢!我使用 AngularFire 发布和获取数据,它可以工作
    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多