无法从firebase获取JSON对象的数据

时间:2017-12-20 11:19:34

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

我想从我的firebase数据库请求的JSON对象中获取登录用户的'userRole'。所以我尝试了以下代码:

ionViewWillLoad(){
    this.afAuth.authState.subscribe(user => {
        this.ref = user.uid;
        this.userService.getUserById(this.ref).subscribe(data => {
            this.data = data
            console.log(this.data);
        })
    });
}

我从我的数据库获取的文件看起来像这样:

0:{$value: "admin@gmail.com", $key: "email", $exists: ƒ}
1:{$value: "password", $key: "password", $exists: ƒ}
2:{$value: 1, $key: "userRole", $exists: ƒ}
3:{$value: "", $key: "worksFor", $exists: ƒ}

如何从此JSON对象访问“userRole”?我尝试了'data.userRole','data [2]。$ value',但这些都不起作用。

以下是将新用户添加到数据库的代码:

getUserById(id){
    return this.afd.list('/users/' + id);
}

register(user){
    return this.afAuth.auth.createUserWithEmailAndPassword(user.email, user.password).then(data => {
        this.afd.object('/users/' + data.uid).update(user);
    });
}

我向数据库添加数据的方式有问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

Firebase有几款产品,我认为你需要使用其中的两款产品。 Authentication用于控制用户身份验证,Realtime database用于保存其他信息,如地址,电话和与项目相关的其他数据。

就我而言,我更愿意将用户信息包装在服务中 - my example。片段:

import { AngularFireDatabase } from 'angularfire2/database';
import { AngularFireAuth } from 'angularfire2/auth';

constructor(public afAuth: AngularFireAuth, private db: AngularFireDatabase) { }

load() {
    let promise = new Promise((resolve, reject) => {
        this.afAuth.authState.subscribe((auth) => {
            this.authState = auth
            resolve(true);
        },
            err => reject(err)
        );
    });

    return promise;
}

get userID(): string {
    return this.authenticated ? this.authState.uid : '';
}

retrieveUser(): any {
    if(this.authenticated === undefined){
        console.log('You need to authenticate first.');
        return null;
    }

    this.user = this.db.object('/users/'+ this.userID)
                    .valueChanges()
                    .publishReplay(1)
                    .refCount();


    return this.user;
}

我这样用:

this.authService.retrieveUser().subscribe(user => {
  this.user = user;  
});