ios - Auth.auth.currentUser.uid 即使登录有效也无法正常工作

标签 ios swift firebase firebase-authentication

在我的应用程序中,当我第一次让用户加入时,我会让他们登录并确认这有效,并且他们会获得一个用户 ID。但稍后在我的 Storyboard 中,我调用了 Auth.auth.currentUser.uid,结果显示为 nil。在我的代码中,我绝不会注销用户。这个问题对我来说非常奇怪,因为在大多数 View Controller b4 中,导致我的应用程序崩溃的那个 currentUser.uid 工作正常,并且我能够将用户的数据存储在 Firebase 上。我尝试调试并得出结论,这个 viewcontroller 代码中有一些东西使这个属性为 nil。有没有人遇到过这个问题b4?这是我的一些 View Controller 代码。 *注意:对于变量 DatabaseRef,我在类的顶部声明。我读过一些关于范围的概念可能是这里的问题?

func getArrayOfMatches(){
    dataBaseRef=Database.database().reference()
    usedArray.removeAll()
    randomNumberArray.removeAll()
    finalPeopleArray.removeAll()
    peopleArray.removeAll()

    print(Auth.auth().currentUser?.uid)
    getUserGender()
    getUsersMatchPreferences()
    checkWhatPoolToDraw()
    getArray()


}

func getUsersMatchPreferences(){
    dataBaseRef=Database.database().reference()
    dataBaseRef.child("Users").child(Auth.auth().currentUser!.uid).observeSingleEvent(of: .value) { (snapshot) in
        if let dictionary=snapshot.value as? [String:AnyObject]{
            self.userMatchPreferences=dictionary["AttractedTo"] as! String

        }

    }
}

func getArray(){
  dataBaseRef=Database.database().reference()
    dataBaseRef.child("Users").child(Auth.auth().currentUser!.uid).child("oldPotentialMatches").observeSingleEvent(of: .value) { (snapshot) in
        let previousMatches=snapshot.value as? String
        if let oldPotential=previousMatches{
            self.usedArray.append(oldPotential)
        }
    }
    dataBaseRef.child(poolToDraw1).observeSingleEvent(of: .value) { (snapshot) in
        let personBook=snapshot.value as? String
        if (personBook != nil) && !self.usedArray.contains(personBook!){
            self.peopleArray.append(personBook!)
        }

    }
    getRandomizedNumbers()
    for i in 0...9{
        let randomNumber=randomNumberArray[i]
        let randomID=peopleArray[randomNumber]
        finalPeopleArray.append(randomID)
        usedArray.append(randomID)
    }
    for i in 0...usedArray.count-1{
       dataBaseRef.child("Users").child("")
    }
}
func getRandomizedNumbers(){
    var numIterations = 10
    if peopleArray.count < 10 {
        numIterations = peopleArray.count
    }
    for i in 0...numIterations{
        var randNumb = Int(arc4random_uniform(UInt32(peopleArray.count)))
        while randomNumberArray.contains(randNumb){
            randNumb=Int(arc4random_uniform(UInt32(peopleArray.count)))
        }
        randomNumberArray.append(randNumb)
    }
}

最佳答案

如果您 100% 登录到用户 UID 可以出现在屏幕上但您无法执行任何其他操作的点,那么最有可能的问题是数据库的规则,因此您需要转到您的firebase 控制面板单击左侧菜单上的“数据库”,然后单击蓝色菜单上的“Rules”。仅用于测试,您可以这样做。

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

关于ios - Auth.auth.currentUser.uid 即使登录有效也无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51668050/

相关文章:

ios - Restkit 本地数据映射操作似乎没有保存到磁盘

iphone - 自动引用计数的困惑

android - 嵌套 Firebase 查询

ios - 使用 Firebase 的应用程序在设备/模拟器上安装 3-4 天后崩溃 (iOS)

arrays - 引用不使用变量名称的结构

ios - 查询 Firebase 中的现有节点返回 null

firebase - 如何使用Flutter在Firestore中显示图像文件

ios - 如何为工作区设置 Jenkins Xcode 插件?

ios - Swift4 条形码(ean13)不工作

ios - 我如何使用 AlamoFireObjectMapper 动态映射 JSON 中的值,该值取决于同一 JSON 中的另一个值?