Firebase Anonymous Auth,无用户

时间:2018-03-03 01:12:56

标签: ios firebase firebase-authentication

我正在使用Firebase数据库并提供匿名登录。在单个设备上进行的第一次匿名登录按预期工作。如果我退出并尝试更多匿名登录,它会成功,完成块没有错误并返回用户。

但是,一旦完成所有操作并且我们已经完成了阻止,Auth.auth().currentUser()就是零。

如果我每秒都运行一次简单的Timer检查Auth.auth().currentUser(),那么在整个登录过程中,它总是为零并且永远不会更改。

代码快速细分:

  1. 匿名登录。
  2. 检查db中是否存在id。
  3. 使用ID更新个人资料displayName,以便日后轻松推荐。
  4. 在db中获取客户端。
  5. 一切都搞错了!
  6. 点按按钮进行登录。

    @IBAction func clientLoginBtnTap(_ sender : UIButton) {
            self.clientActivityIndicator?.showActivityIndicator()
    
            Auth.auth().signInAnonymously { (user, error) in
                if error == nil {
                    //check id matches available client
                    self.checkClient(id: (self.clientIdField?.text)!, completion: { (isValid) in
                        if isValid == true {
                            //now signed in, update client id
                            let profileChangeRequest = user?.createProfileChangeRequest()
                            profileChangeRequest?.displayName = self.clientIdField?.text
                            profileChangeRequest?.commitChanges(completion: { (error) in
                                if error == nil {
                                    //done
                                    UserDefaults.standard.set(true, forKey: kIS_USER_CLIENT_NOT_TRAINER)
                                    self.dismiss(animated: true, completion: {
                                        //self.delegate?.didLoginAsClient()
                                    })
                                }
                                else {
                                    self.logout()
                                    self.clientIdField?.shake()
                                    self.clientActivityIndicator?.hideActivityIndicator()
                                }
                            })
                        }
                        else {
                            self.logout()
                            self.clientIdField?.shake()
                            self.clientActivityIndicator?.hideActivityIndicator()
                        }
                    })
                }
                else {
    
                }
            }
        }
    
    func checkClient(id : String, completion: @escaping (_ isValid : Bool) -> Void) {
            let ref = Database.database().reference().child("v2").child("clients").child(id)
            ref.observeSingleEvent(of: .value, with: { (snapshot) in
                if snapshot.exists() { completion(true) }
                else { completion(false) }
            }) { (error) in
                completion(false)
            }
        }
    
    func logout() {
            do {
                try Auth.auth().signOut()
            }
            catch let error as NSError {
                print (error.localizedDescription)
            }
        }
    

    登录成功。

    然后在登录后运行,user存在但Auth.auth().currentUser()为零。当客户端登录发生时,我尝试获取客户端数据但拒绝权限,因为我们没有用户。

    handle = Auth.auth().addStateDidChangeListener { (auth, user) in
                self.currentUser = user
    
                if user == nil {
                    self.updateForNoUser()
                }
                else {
                    self.updateForUser()
                }
            }
    
    func updateForUser() {
            //Trainer Logged in
            if UserDefaults.standard.bool(forKey: kIS_USER_CLIENT_NOT_TRAINER) == false {
                self.performSegue(withIdentifier: "master", sender: self)
            }
            //Client Logged in
            else {
                if let id = Auth.auth().currentUser?.displayName {
                    let ref = Database.database().reference().child("v2").child("clients").child(id)
                    ref.observeSingleEvent(of: .value, with: { (snapshot) in
                        if snapshot.exists() {
                            self.client = Client(snapshot: snapshot)
                            self.performSegue(withIdentifier: "masterClient", sender: self)
                        }
                    }) { (error) in }
                }
                else {
                    do {
                        try Auth.auth().signOut()
                    }
                    catch let error as NSError {
                        print (error.localizedDescription)
                    }
                }
            }
        }
    

0 个答案:

没有答案