在我的应用程序中,user
应该能够删除该帐户。我正在努力完成这项工作,因为我必须从数据库和身份验证中删除。
我以为我可以deleteFromAuthentication
先,然后我deleteEntryFromDatabase
。这些是两个功能:
//MARK: deleteUserFromDatabase
static func deleteUserEntryFromDatabase(oldUserId: String, finished: @escaping (_ done: Bool) -> Void) {
Auth.auth().signInAnonymously() { (authResult, error) in
let db = Firestore.firestore()
db.collection("users").document(oldUserId).delete() { err in
if err != nil {
Utilities.showErrorPopUp(labelContent: "Fehler", description: err!.localizedDescription)
finished(false)
} else {
finished(true)
}
}
}
}
//MARK: deleteUserFromAuthentication
static func deleteUserFromAuthentication(finished: @escaping (_ done: Bool, _ hasToReauthenticate: Bool) -> Void) {
let user = Auth.auth().currentUser
user?.delete { err in
if err != nil {
if let errCode = AuthErrorCode(rawValue: err!._code) {
switch errCode {
case .requiresRecentLogin:
finished(true, true)
default:
Utilities.showErrorPopUp(labelContent: "Fehler", description: err!.localizedDescription)
finished(false, false)
}
}
} else {
finished(true, false)
}
}
}
我如何使用它们:
func deleteAccount() {
var uid = ""
if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
uid = defaults.getUid()!
defaults.synchronize()
}
DataHandler.deleteUserFromAuthentication { (finished, hasToReauthenticate) in
if finished {
if hasToReauthenticate {
self.showReauthenticationAlert()
} else {
DataHandler.deleteUserEntryFromDatabase(oldUserId: uid) { (finished) in
if finished {
let firstLaunchVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FirstLaunchVC")
self.navigationController?.pushViewController(firstLaunchVC, animated: false)
if let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey) {
defaults.removePersistentDomain(forName: UserDefaults.Keys.groupKey)
defaults.synchronize()
}
} else {
self.loadingFailed()
}
}
}
} else {
self.loadingFailed()
}
}
}
但是,当我收到错误消息时,这不起作用insufficient permissions
。我以为我可以解决这个问题,signInAnonymously
但显然这不起作用。
这些是我的Cloud-Firestore-Rules
:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if request.auth != null;
}
}
}
有谁可以帮我离开这里吗?我希望一切都清楚,如果您需要更多信息,请告诉我。