2015-06-18 61 views
15

我打算創建一個主樹調用用戶,其中將包含不同用戶用作USERNAME的名稱。所以每個用戶名都會包含他們的數據,例如全名,地址,電話號碼。我想知道如何在登錄其個人資料時獲取每個用戶的數據。如何將每個用戶鏈接到Firebase中的數據?

回答

36

首先,我建議你花一些時間熟悉火力點,通過閱讀Firebase GuideLink to old Firebase Guide)。您需要了解的所有信息才能回答您自己的問題。但是,爲了簡單起見,我將在這裏放一個例子:

讓我們從安全開始,這裏有你需要爲這個示例的基本火力規則:(來源:Understanding Security)(舊來源:Understanding Security

{ 
    "rules": { 
    "users": { 
     "$user_id": { 
     ".write": "$user_id === auth.uid" 
     } 
    } 
    } 
} 

我將跳過實際的用戶創建和登錄,並關注存儲和檢索用戶數據的問題。

存儲數據:(來源:Firebase Authentication)(舊來源:User Authentication

// Get a reference to the database service 
var database = firebase.database(); 
// save the user's profile into Firebase so we can list users, 
// use them in Security and Firebase Rules, and show profiles 
function writeUserData(userId, name, email, imageUrl) { 
    firebase.database().ref('users/' + userId).set({ 
    username: name, 
    email: email 
    //some more user data 
    }); 
} 

產生的火力點的數據將是這樣的:

{ 
    "users": { 
    "simplelogin:213": { 
     "username": "password", 
     "email": "bobtony" 
    }, 
    "twitter:123": { 
     "username": "twitter", 
     "email": "Andrew Lee" 
    }, 
    "facebook:456": { 
     "username": "facebook", 
     "email": "James Tamplin" 
    } 
    } 
} 

最後但並非最不重要的的retreiving數據,這可以通過幾種方式完成,但對於這個例子,我將使用來自Firebase指南的簡單示例:(來源:Read and Write data)(舊來源:Retreiving Data

//Get the current userID 
var userId = firebase.auth().currentUser.uid; 
//Get the user data 
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) { 
    //Do something with your user data located in snapshot 
}); 

編輯:返回數據的

所以增加了例如當您登錄爲用戶的Twitter:123,你會得到基於你的用戶ID的位置的參考,並會得到這樣的數據:

"twitter:123": { 
      "username": "twitter", 
      "email": "Andrew Lee" 
     } 
+0

是的,安德烈。謝謝。現在想象一下上面代碼中的用戶是一個數據庫,其中不同的外部人(例如「simplelogin:123」,「twitter:123」等)創建他們的賬戶,每個外部人如何獲得自己的數據? – DIPXOID

+0

我的示例的最後一部分已經發生,**。child(authData.uid)**使用其唯一用戶標識(simplelogin:213,twitter:123,...) –

+0

添加到我的答案顯示返回數據 –

-2

在角度1 angularfire

控制器代碼:

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

var syncUserObject = $firebaseObject(ref); 
syncUserObject.$bindTo($scope, "data"); 

HTML視圖:

<input type="text" ng-model="data.username"/> 
<!-- all changes from our Firebase database magically appear here! --> 
<p>You said: {{ data.username }}</p> 

這就形成了一個非常漂亮的三路數據綁定!

相關問題