Firesbase身份验证iOS登录获取用户详细信息

Firesbase身份验证iOS登录获取用户详细信息,ios,swift4,Ios,Swift4,我刚刚遵循并正确地将以下教程添加到我的应用程序中。但我正在努力从Firestore数据库中获取“登录”用户的详细信息 本教程: 一旦用户通过我的应用程序注册,“名字”、“姓氏”和“UID”将由Firestore数据库保存。但一旦用户登录,我如何让用户的名字复制到应用程序内欢迎屏幕上的标签上 谢谢我想你知道Firestore的工作原理吧。如果你不知道,你可以在这里获得所有信息,或者在YouTube上观看Firestore 假设您将用户保存在名为users的集合中。当用户登录时,您可以获得如下当前

我刚刚遵循并正确地将以下教程添加到我的应用程序中。但我正在努力从Firestore数据库中获取“登录”用户的详细信息

本教程:

一旦用户通过我的应用程序注册,“名字”、“姓氏”和“UID”将由Firestore数据库保存。但一旦用户登录,我如何让用户的名字复制到应用程序内欢迎屏幕上的标签上


谢谢

我想你知道Firestore的工作原理吧。如果你不知道,你可以在这里获得所有信息,或者在YouTube上观看Firestore

假设您将用户保存在名为users的集合中。当用户登录时,您可以获得如下当前用户:

让currentSignInUser=Auth.Auth().currentUser!
如果要强制展开,请确保用户已登录

当您有当前用户时,您可以通过调用当前用户的
uid
属性来获取其uid:

让currentUserID=currentSignInUser.uid
现在,您可以查询此uid以从Firestore用户集合中获取与当前登录用户具有相同uid字段值的文档:

let query=Firestore.Firestore().collection(“用户”).whereField(“UID”,isEqualTo:currentUserID)
确保
whereField()
函数的第一个参数与文档中的字段名相同。因为您提到UID保存到数据库,所以我将其命名为UID

这一切都是为了获取您当前用户的信息并对其进行查询。现在,您可以从Firestore获取文档:

中的
query.getDocuments(){[weak self](querySnapshot,err)
如果让err=err{
打印(“获取文档时出错:\(错误)”)
}否则{
如果让userInfo=querySnapshot?.documents.first{
DispatchQueue.main.async{
//将标签文本设置为“第一个名称”
self?.youLabel.text=userInfo[“firstName”]
}
}
}
}

userInfo
键更改为在Firestore中存储名字时使用的任何名称。例如,如果您将文档字段命名为
firstName
,那么
userInfo
字典键必须是firstName

,这太棒了,我稍后会试用。我成功地将其替换为
“Firestore.Firestore().getDocuments
使用
查询.getDocuments
现在我可以从数据库中获取数据,但是如何像bool一样更新现有数据?再次使用当前登录的用户?好的,谢谢您的出色工作。我阅读了有关更改Firestore中的字段的内容,您将使用“更新”,但似乎仍然无法使其正常工作?您是否使用类似于
Firestore.Firestore().collection(“users”).whereField(“UID”,isEqualTo:currentUserID)。更新
只是登录用户集合中的一个Bool字段。我设置了“firstname”、“secondname”和1个名为“testpassed”的布尔值“当用户第一次在应用程序中注册时,布尔值设置为‘false’,但当用户在应用程序中通过测试时,该布尔值应设置为‘true’。我猜你首先必须像我们之前一样重新获取用户UID,才能让bool将其更改为“true”?好的,我明白了
userInfo
我在上一个代码段中声明的变量具有
reference
属性。您必须始终具有引用才能在firebase中操作数据,这可以是集合引用或文档引用。在您的情况下,您可以使用
userInfo.reference
获取引用,然后您可以调用
updateData([“testpassed”:true])
或传入您希望在此特定文档上更新的任何其他值。请记住,它必须是字典,并且键必须与字段名称相同。值也是如此,它们必须具有您在firebase中指定的相同数据类型。