Cloud Firestore 保存额外的用户数据
Posted
技术标签:
【中文标题】Cloud Firestore 保存额外的用户数据【英文标题】:Cloud Firestore saving additional user data 【发布时间】:2018-08-15 08:37:33 【问题描述】:如何在 Cloud Firestore 数据库中保存其他用户数据?我的意思是,哪一个是正确的方法?我想创建一个用户集合,我可以在其中存储他们的用户名和其他数据。我已经找到了关于这个问题的答案,但他们都在使用“旧”的 Firebase 实时数据库解决方案。
现在我是这样做的(这是一个Vue组件):
methods:
doSignUp ()
if (!this.email || !this.password)
return
firebase.auth().createUserWithEmailAndPassword(this.email, this.password)
.then(data =>
this.createUser(data)
).catch(err => console.log(err))
,
createUser (userObject)
const docRef = this.$store.getters.getDB.collection('users')
const username = userObject.email.split('@')[0]
docRef
.doc(username)
.set(
id: userObject.uid,
username
).then().catch((err) => console.log(err))
在上面的示例中,我只是简单地在“users”集合中创建了一个新文档,并将用户的 ID 保存为“id”。这是正确的方法吗?我不确定。
【问题讨论】:
在您的示例中,“用户名”可能不是唯一的 是的,我知道,感谢您的评论。它只是一个学习 Vue 和 Firebase 的演示应用。 这正是我的方法。您最终得到 2 个用户列表,您需要注意,如果用户想要删除他的个人资料,您需要将他从 2 个地方删除,但除此之外没关系 你还需要检查用户是否已经退出 【参考方案1】:我认为你的例子没有什么不好。当然,只要您在 firestore
数据库上设置适当的安全规则 :)
另一件事是,IMO 使用实时数据库和 Firestore 没有区别。不同之处在于架构及其“幕后”的工作方式,但总体用法非常相似(API 与 AFAIK 略有不同)。
我可以向您推荐的另一种解决方案是使用 Firebase 函数和 Firestore 触发器在您的 Web 应用程序外部写入数据库内容 - https://firebase.google.com/docs/auth/extend-with-functions 此解决方案将消除客户端上 createUser
函数的必要性.
【讨论】:
我忽略了这些“云功能”,感谢您的建议! @sarneeh"Of course as long as you set up proper security rules on your firestore database :) "
这些适当的规则是什么?因为此时,没有用户通过身份验证。那么如何以安全/可靠的方式保存用户文档呢? (除了使用触发器...)
@Vegar 我对 Firebase 不是很有经验,但我会考虑使用匿名身份验证:firebase.google.com/docs/auth/web/anonymous-auth
我是新手,但遵循了一个教程,该教程做了@zedz01 在问题中建议的操作,但是他们还说您应该保护数据库免受匿名访问,因为他们的代码并没有真正起作用。 ..您的建议可能有效,但听起来不像应该这样做。喜欢你的触发器/功能更好。会调查的。
嗯...根据文档,用户应该在调用createUser...
后登录,所以我猜肯定有其他问题...【参考方案2】:
是的,这是正确的方法,您将有一个名为 Users
的集合,在该集合中将有一个文档,它是 doc(username)
,其值为 id: userid
您还可以将userid
保存为一个对象,在该对象内您将拥有与该useruid
相关的值
像这个例子:
var frankDocRef = db.collection("users").doc("frank");
frankDocRef.set(
name: "Frank",
favorites: food: "Pizza", color: "Blue", subject: "recess" ,
age: 12
);
https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
【讨论】:
以上是关于Cloud Firestore 保存额外的用户数据的主要内容,如果未能解决你的问题,请参考以下文章
将图像存储在 Firebase Storage 中并将元数据保存在 Firebase Cloud Firestore(测试版)中
如何将具有动态 ID 的文档保存到 Cloud Firestore?总是在变化
如何限制用户仅从 Cloud Firestore 检索他们的数据?