【问题标题】:Can't get firebase user info from provider无法从提供商处获取 firebase 用户信息
【发布时间】:2017-12-01 14:44:54
【问题描述】:

当我尝试在提供者的帮助下获取数据时遇到了问题。一切看起来都很好,但我还是做不到。

//Provider
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';

@Injectable()
export class SomeProvider {
user: Observable<firebase.User>;

  constructor(private firebaseAuth: AngularFireAuth) {
    this.user = firebaseAuth.authState;
  }

this.firebaseAuth.authState.subscribe(user => {console.log(user.uid)}); // i can get UID with this
........

但是当我在这里调用它时,它返回未定义:

//menu.ts
import { SomeProvider } from '../../providers/some/some';
import { Component } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';

@IonicPage()
@Component({
  selector: 'page-menu',
  templateUrl: 'menu.html',
})
export class MenuPage {

constructor(private cfg: SomeProvider, private firebaseAuth: AngularFireAuth){}
ionViewDidLoad(){ 
console.log(this.cfg.user.uid);  //returns undefined
.....

我尝试过 firebase SDK,但遇到了同样的问题。

【问题讨论】:

    标签: angular firebase firebase-authentication angularfire2


    【解决方案1】:

    您缺少user: Observable&lt;firebase.User&gt;; 所需的firebase 导入,如果您还没有,您应该在SomeProvider 中导入它:

    import * as firebase from 'firebase/app';
    

    另外,根据您的代码,user 是一个 Observable,因此您需要订阅它:

    export class MenuPage {
    
      constructor(private cfg: SomeProvider, private firebaseAuth: AngularFireAuth){}
      ionViewDidLoad(){ 
        this.cfg.user.subscribe(user => console.log(user.uid));
    


    或者:
    @Injectable()
    export class SomeProvider {
      user: Observable<firebase.User>;
      userId: string; // initialize
    
      constructor(private firebaseAuth: AngularFireAuth) {
        this.user = firebaseAuth.authState;
        this.user.subscribe(user => this.userId = user.uid); // assign userId here
      }
    
      get getUserId(): string {
        return this.userId;
      }
    

    然后在组件中:

    export class MenuPage {
    
      constructor(private cfg: SomeProvider, private firebaseAuth: AngularFireAuth){}
      ionViewDidLoad(){ 
        console.log(this.cfg.getUserId); // user id should be logged here
    

    【讨论】:

    • 如何返回这样的数据 profile(req){this.firebaseAuth.authState.subscribe(user =&gt; {return user.req})}; currentUser 似乎没有按预期工作。
    • 这将返回一个实际的subscription 对象,这就是它不起作用的原因。如果您只想从您的服务中返回静态值,我建议您在您的服务constructor 中订阅authState 并将您想要的值分配给类属性。将更新一个例子
    • 我明白了。但它是静态值,它将在脚本中添加更多代码,可以通过 1 行代码在菜单中完成。感谢您的快速回复
    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 2017-02-12
    • 2023-01-26
    • 1970-01-01
    • 2016-07-06
    • 2018-09-08
    • 2013-03-27
    • 2012-08-20
    相关资源
    最近更新 更多