我如何 link 每个用户访问他们在 Firebase 中的数据?
How do I link each user to their data in Firebase?
我计划创建一个名为 users 的主树,其中将包含用作用户名的不同用户的名称。因此,每个用户名都将包含他们的数据,例如全名、地址、Phone 编号
我想知道如何在每个用户登录个人资料时获取他们的数据。
首先,我建议您花一些时间阅读 Firebase Guide (Link to old Firebase Guide) 来熟悉 firebase。您在回答自己的问题时需要知道的一切都可以在那里找到。但为简单起见,我将在这里举一个例子:
让我们从安全性开始,这里是本示例所需的基本 firebase 规则:(来源:Understanding Security) (old source: Understanding Security)
{
"rules": {
"users": {
"$user_id": {
".write": "$user_id === auth.uid"
}
}
}
}
我将跳过实际的用户创建和登录,重点关注有关存储和检索用户数据的问题。
存储数据:(来源:Firebase Authentication) (old source: 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
});
}
生成的 firebase 数据将如下所示:
{
"users": {
"simplelogin:213": {
"username": "password",
"email": "bobtony"
},
"twitter:123": {
"username": "twitter",
"email": "Andrew Lee"
},
"facebook:456": {
"username": "facebook",
"email": "James Tamplin"
}
}
}
最后但并非最不重要的一点是检索数据,这可以通过多种方式完成,但对于这个示例,我将使用 firebase 指南中的一个简单示例:(来源:Read and Write data) (old source: 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
});
编辑:添加了 return 数据的示例
因此,当您以用户 twitter:123 身份登录时,您将根据您的用户 ID 获得对位置的引用,并将获得以下数据:
"twitter:123": {
"username": "twitter",
"email": "Andrew Lee"
}
虽然我同意 Andre 关于设置良好安全性规则的观点 - 我会以不同方式处理数据。我没有生成字符串,而是使用 child()
方法。个人喜好问题。
获取UID并定义一个数据对象:
let user = firebase.auth().currentUser
let uid = user.uid
let yourdata = { foo: 'something', bar: 'other'}
保存数据:
firebase.database().ref('users').child(uid).set(yourdata)
.then((data) => {
console.log('Saved Data', data)
})
.catch((error) => {
console.log('Storing Error', error)
})
获取数据:
firebase.database().ref('users').child(uid).once('value')
.then((data) => {
let fetchedData = data.val()
console.log('Fetched Data', fetchedData)
})
.catch((error) => {
console.log('Fetching Error', error)
})
请注意 set()
将覆盖您的数据,因此您以后可能需要使用 push()
。
我计划创建一个名为 users 的主树,其中将包含用作用户名的不同用户的名称。因此,每个用户名都将包含他们的数据,例如全名、地址、Phone 编号
我想知道如何在每个用户登录个人资料时获取他们的数据。
首先,我建议您花一些时间阅读 Firebase Guide (Link to old Firebase Guide) 来熟悉 firebase。您在回答自己的问题时需要知道的一切都可以在那里找到。但为简单起见,我将在这里举一个例子:
让我们从安全性开始,这里是本示例所需的基本 firebase 规则:(来源:Understanding Security) (old source: Understanding Security)
{
"rules": {
"users": {
"$user_id": {
".write": "$user_id === auth.uid"
}
}
}
}
我将跳过实际的用户创建和登录,重点关注有关存储和检索用户数据的问题。
存储数据:(来源:Firebase Authentication) (old source: 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
});
}
生成的 firebase 数据将如下所示:
{
"users": {
"simplelogin:213": {
"username": "password",
"email": "bobtony"
},
"twitter:123": {
"username": "twitter",
"email": "Andrew Lee"
},
"facebook:456": {
"username": "facebook",
"email": "James Tamplin"
}
}
}
最后但并非最不重要的一点是检索数据,这可以通过多种方式完成,但对于这个示例,我将使用 firebase 指南中的一个简单示例:(来源:Read and Write data) (old source: 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
});
编辑:添加了 return 数据的示例
因此,当您以用户 twitter:123 身份登录时,您将根据您的用户 ID 获得对位置的引用,并将获得以下数据:
"twitter:123": {
"username": "twitter",
"email": "Andrew Lee"
}
虽然我同意 Andre 关于设置良好安全性规则的观点 - 我会以不同方式处理数据。我没有生成字符串,而是使用 child()
方法。个人喜好问题。
获取UID并定义一个数据对象:
let user = firebase.auth().currentUser
let uid = user.uid
let yourdata = { foo: 'something', bar: 'other'}
保存数据:
firebase.database().ref('users').child(uid).set(yourdata)
.then((data) => {
console.log('Saved Data', data)
})
.catch((error) => {
console.log('Storing Error', error)
})
获取数据:
firebase.database().ref('users').child(uid).once('value')
.then((data) => {
let fetchedData = data.val()
console.log('Fetched Data', fetchedData)
})
.catch((error) => {
console.log('Fetching Error', error)
})
请注意 set()
将覆盖您的数据,因此您以后可能需要使用 push()
。