当前位置: 首页 > 知识库问答 >
问题:

iOS SWIFT:无法从Firebase数据库中删除用户

南宫博简
2023-03-14

我想从Firebase中删除我的当前用户。经过身份验证的用户被删除,但是我无法删除数据库中该用户的数据。我做错了什么?

这是我的删除用户方法。。。。

FIRAuth.auth()?.signIn(withEmail: (emailTextField?.text)! , password: (passwordTextField?.text)!, completion: { (user, error) in
            if error == nil {
                print("User Authenticate!!!")
                let user = FIRAuth.auth()?.currentUser

                user?.delete(completion: { (error) in
                    if error != nil {
                        print("Error unable to delete user")

                    } else {

                        DataService.ds.deleteCurrentFirebaseDBUser()
                        KeychainWrapper.standard.removeObject(forKey: KEY_UID)
                        self.performSegue(withIdentifier: "goToLogin", sender: nil)
                    }
                })

            } else {
                //Password was wrong, unable to authenicate user. Data is not updated
                print("!!!ALERT!!! Unable to authenticate user")
                let alert = UIAlertController(title: "Incorrect Password", message: "Please re-enter your password", preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
                self.present(alert, animated: true, completion: nil)
            }

        })

Firebase规则:

{
"rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

数据库:

App
   -> users
           ->
             4erkjkl543jfe46
                            ->name
                            ->email

错误:

2017-01-21 21:33:10.321704应用程序[11582:4102711][FirebaseDatabase]设置值:或删除值:at/users/4erkjkl543jfe46失败:权限被拒绝

可选(错误域=com.firebase Code=1“权限被拒绝”用户信息={NSLocalizedDescription=权限被拒绝})

共有3个答案

浦墨竹
2023-03-14

要从Firebase中删除子级,请使用“removeValue()”

 var db: DatabaseReference!
  override func viewDidLoad() {
        super.viewDidLoad()
        db = Database.database().reference()        
        deleteByID()
    }
 func deleteByID(){
        db.child("YOURID").removeValue()
    }
阴飞星
2023-03-14

我们可以从身份验证和数据库中删除用户。但在此之前,我们需要首先重新验证用户,然后获取最新的令牌来删除该用户。

下面是漂亮的代码:

  let user = Auth.auth().currentUser
            user?.reauthenticate(with:credential) { error in
                if let error = error {
                    // An error happened.
                    showAlertWithErrorMessage(message: error.localizedDescription)
                } else {
                    // User re-authenticated.
                    user?.delete { error in
                        if let error = error {
                            // An error happened.
                            showAlertWithErrorMessage(message: error.localizedDescription)
                        } else {
                            // Account deleted.
                            let userID = HelperFunction.helper.FetchFromUserDefault(name: kUID)
                            Database.database().reference(fromURL: kFirebaseLink).child(kUser).child(userID).removeValue()

                            try!  Auth.auth().signOut()
                             showAlertWithErrorMessage(message: "Your account deleted successfully...")
                           return
                        }
                    }

                }
            }

100%在我的项目中工作,并经过良好测试

卜盛
2023-03-14

我也有同样的问题。您无法使用函数deleteCurrentFirebaseDBUser(),因为Firebase delete函数(如果成功)删除了user auth对象

因此,当您想使用deleteMONtFirebase DBUser()删除数据库中的用户数据时,用户不再经过身份验证。

目前我在Firebase删除功能之前删除数据库中的用户数据,这不是理想的解决方案。

 类似资料:
  • viewuser.jsp 你好,我有问题在删除用户。它显示执行后输出失败。我认为它没有从ViewUser中获取用户名。请帮帮我.查询正常,数据库连接仍有问题,取用户名并删除。谢谢你!

  • 我仍在开发我的登录应用程序。此时,用户可以注册、登录和更新配置文件信息。数据存储在firebase实时数据库中,该装置也通过firebase工作。我想添加一个“删除配置文件”按钮,以便从firebase中删除用户信息。我弄清楚了如何从自动认证过程中删除用户。现在我尝试对Uid调用remove()函数,因此现在数据在实时数据库中被删除,但仍在Firebase身份验证中,如果删除userdata,应用

  • 我以为上面的办法行得通,但它失败了。我把它放在渲染行部分。它出现了reference.remove失败。第一个参数必须是有效的函数。就像在这些房间里,它有信息,我认为这是我出错的地方,但我不知道如何去做它。谢谢。

  • 如何从控制台从FireBase中删除节点?由于它太大,显然我无法从控制台中删除它。通常我可以按节点名称附近的删除按钮,但它显示控制台仅出于性能原因而读取。

  • 我找不到从Firebase数据库中删除股票的方法: 谁能给我指一下正确的方向吗?谢谢

  • 我开始使用一个代码,使用Firebase实时数据库。我将它实现到我的解决方案中。连接和控制非常完美,所以我将其用于生产环境。 一段时间后,我在升级,我需要再次删除所有数据-但请稍候,控制台中最高根级别不再有删除按钮,并且一次只允许在一个选定项目中: 上次更新仅显示此消息,没有后续步骤: 只读 问:如何一次删除所有数据?