2

Wie bekomme ich die aktuelle Benutzeradresse von Firebase? Brauche Hilfe für diesen Teil. Ich habe den aktuellen Benutzer verwendet, um die Adresse anzurufen, kann sie aber nicht abrufen. Ich bin in der Lage, alle Benutzeradresse von der Firebase zu erhalten. Aber als ich unten versuchte, die aktuelle Benutzeradresse abzurufen, ist es fehlgeschlagen.So erhalten Sie die aktuelle Benutzeradresse von 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' 
      } 
     }) 


      } 
     }); 

    });  
    } 

Mein Konstruktor, wo ich currentUserId deklariere. Diese

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); 

    } 

ist, wie meine Feuerbasis Konsole aussehen wie enter image description here

Nun ich diese Fehlermeldung am gettting

enter image description here

+0

Ok reqdetails und regdetails hat Adresse. Aber ich kann keine Adresse vom aktuellen Benutzer erhalten – Suresh

+0

Haben Sie versucht, console.log (childsnapshot.val()) zu überprüfen, um sicherzustellen, dass Sie einen Wert erhalten, um damit zu beginnen? Ich sehe keine Probleme damit, wie Sie die Adresse vom Snapshot erhalten, vorausgesetzt, der Wert von childsnapshot ist der '0AJ2wNW ...' - Knoten in der von Ihnen bereitgestellten Bildschirmaufnahme. – nclarx

+0

Yup. Ich kann nicht verstehen, warum ich die aktuelle Benutzeradresse nicht bekommen kann. – Suresh

Antwort

1

Die folgende Antwort macht diese Annahmen:

  • Sie Einen Benutzer anmelden
  • der Schlüssel zu Ihrer Anfrage Datensatz ist die Benutzer-ID des Benutzers, der aktuell in

Ihr Problem angemeldet ist, ist, dass, wenn Sie die Datenbankreferenz zu erstellen:

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

Sie das Kind nicht Targeting Knoten von request mit der aktuellen Benutzer-UID. Sie müssen den aktuellen Benutzer uid erhalten und dann die Datenbank Bezug auf diese Weise erstellen:

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

Sie scheinen zu denken, dass es eine Verbindung zwischen den Authentifizierungsdaten in Feuerbasis ist und die Echtzeit-Datenbank. In Firebase gibt es keine Verbindung zwischen diesen beiden Dingen - Sie können nur die Benutzer-ID verwenden, um Daten in der Echtzeitdatenbank mit einem Benutzer zu verknüpfen.

Hier sind zwei Möglichkeiten mit dem Firebase SDK und AngularFire2 für Ihre openMapPage() Funktion:

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 
}); 
+0

Ich habe versucht, dem Link zu folgen, den Sie mir gegeben haben. Jetzt gibt es mir einen undefined currentUserId Fehler. Ich habe meinen Beitrag aktualisiert – Suresh

+0

Es ' s zurück undefined, weil die currentid ist nur ein String-Wert des aktuellen Benutzers ' s uid. Die Variable current ist kein Objekt aus der Datenbank, sondern eine Zeichenfolge aus firebase.auth().currentuser Ich ändere meine Antwort und fülle diese aus, wenn ich heute morgen vor meinem PC bin – nclarx

+0

Aktualisiere einfach meine openMapPage-Methode. Danke – Suresh

Verwandte Themen