如何从firebase获取当前用户地址

Posted

技术标签:

【中文标题】如何从firebase获取当前用户地址【英文标题】:How to get current user address from firebase 【发布时间】:2018-01-10 15:48:46 【问题描述】:

如何从 firebase 获取当前用户地址?这部分需要帮助。我已经使用当前用户调用地址,但无法获取。 我能够从 firebase 获取所有用户地址。但是当我在下面尝试检索当前用户地址时,它失败了。

 openMapPage()
  


    var ref = firebase.database().ref("request");
    ref.once("value").then((snapshot) =>  // <------ Here!
        var a = snapshot.exists();  // true
        var c = snapshot.hasChild("reqdetails"); // true
        var d = snapshot.child('reqdetails').exists();
        var requestsKey = snapshot.key;
        var requestsValue = snapshot.val();


        //var currentadd = requestsKey.reqdetails.address;


          //this.afAuth.authState.take(1).subscribe(data =>
      ///this.profileData = this.af.object(this.user);
            //console.log(this.profileData);
    //) 

    firebase.auth().onAuthStateChanged(function(user) 
        if (user) 
    // User is signed in.
         var user = firebase.auth().currentUser;
         var currentUserId = user.uid;

         var currentadd = this.currentUserId.regdetails.address;
          console.log("Current User Address");
          console.log(currentadd);

         else 
    // No user is signed in.
        
      );



        snapshot.forEach((childSnapshot) =>  // <------ And here!
            var requestKey = childSnapshot.key;
            var requestValue = childSnapshot.val();
            var reqdetails = requestValue.reqdetails;
            var AllUserAddress = requestValue.regdetails.address;


           //var currentUserAdd = currentUserId.address;




            if (reqdetails) 
                this.data = requestKey;
                console.log(this.data);
                //this.arr.push(requestKey);
                //console.log(this.arr);

                 this.getRequest = this.angFire.list('request', 
                   query: 
                   orderByChild: 'reqdetails',
                   startAt: 'reqdetails'
            
         ) 


            
        );

    );     
  

我声明 currentUserId 的构造函数。

constructor(public navCtrl: NavController, public navParams: NavParams, private angFire: AngularFireDatabase,private af: AngularFireDatabase,
  private afAuth: AngularFireAuth) 
    //this.request = angFire.list('/request');

    this.getRequest = angFire.list('request', 
      query: 
        orderByChild: 'reqdetails',
        startAt: 'reqdetails'
      
    )

        var user = firebase.auth().currentUser;
        var currentUserId = user.uid;

    //this.userreq = angFire.list(`$this.userkey`);
    //this.reqdetails = angFire.list('reqdetails');
    //this.request = angFire.list(this.data);

  

这就是我的 Firebase 控制台的样子

现在我得到了这个错误

【问题讨论】:

好的 reqdetails 和 regdetails 有地址。但我无法从当前用户那里获取地址 您是否尝试过 console.log(childsnapshot.val()) 以确保您收到一个开始的值?假设 childsnapshot 的值是您提供的屏幕截图中的“0AJ2wNW ...”节点,我看不出您如何从快照中获取地址的任何问题。 是的。我不明白为什么我无法获取当前用户地址。 【参考方案1】:

以下答案做出了这些假设:

您有一个用户登录 你的请求记录的key是当前登录用户的uid

您的问题是,当您创建数据库引用时:

var ref = firebase.database().ref("request");

您没有使用当前用户的 uid 定位 request 的子节点。您需要获取当前用户的uid,然后通过这种方式创建数据库引用:

var uid = firebase.auth().currentUser.uid;
var ref = firebase.database().ref("request/" + uid);

您似乎认为 firebase 中的身份验证数据与实时数据库之间存在联系。 Firebase 中这两件事之间没有联系 - 您只能使用用户的 uid 将实时数据库中的数据链接到用户。

以下是为您的openMapPage() 函数使用 Firebase SDK 和 AngularFire2 的两种可能性:

1) Firebase SDK:

var uid = firebase.auth().currentUser.uid; // Gets current user uid as string
var ref = firebase.database().ref('request/' + uid); // Make database ref which points to a child node of request that matches the current user's uid
ref.once('value', (request) => 
    var currentUserAddress = request.val().reqdetails.address;
  );

2) AngularFire2:

import 'rxjs/add/operator/switchMap';
var auth$ = this.afAuth.authState; // Get an observable of the authstate for the current user

var userRequest$ = auth$.switchMap((auth: firebase.User) =>  // Use switchMap to subscribe and get the authstate
    return this.af.object('request/' + auth.uid); // Use the uid to get the appropriate "request" node
);

userRequest$.subscribe((request) =>  // subscribe to the userRequest$ observable (I would suggest returning this to your component and using the async pipe instead of subscribing here)
  var currentAdd = request.reqdetails.address; // access the address
);

【讨论】:

我试图点击你给我的链接。现在它给了我一个未定义的 currentUserId 错误。我已经更新了我的帖子 返回 undefined 因为 currentid 只是当前用户 uid 的字符串值。 currentid 变量不是来自数据库的对象,它是来自 firebase.auth() 的字符串。 currentuser 我将更改我的答案并在今天晚些时候在我的电脑前填写更多内容 谢谢你解释得很好 请您也帮忙看看这个好吗? ***.com/questions/65672383/…

以上是关于如何从firebase获取当前用户地址的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 获取本地用户或当前用户的用户名?

如何使用 Flutter 从 Firebase 获取当前活跃用户?

在android中获取firebase用户ID

如何从 BigQuery 中的 Firebase 事件中获取用户表?

Firebase - 显示到 ListView

从 Cloud Functions for Firebase 获取当前用户 ID(PubSub 触发器)