从 Firebase 中删除 Google 或 Facebook 用户

2023-12-30

要从身份验证选项卡中删除用户,我使用以下代码:

    if let user = FIRAuth.auth()?.currentUser{
            user.delete(completion: nil)
    }

当用户使用电子邮件/密码组合注册时,这工作得很好,但当他们使用社交帐户注册时,它们不会被删除,我仍然可以在“身份验证”选项卡中看到他们的电子邮件、UID 等。

如何从 Firebase 中删除这些用户?

提前致谢


谢谢 Jogendra,重新身份验证是解决我的问题的关键,我接受了答案。这是使用 Swift 3 的完整答案,其中包含用于检索用户凭据的代码。

 func deleteAllUserData(){
        if let user = FIRAuth.auth()?.currentUser{
            user.delete(completion: { (err) in
                if(err != nil){
                print(err!.localizedDescription)
                //Try to re-authenticate if there is an error
                self.getProvider()
                }else{
                self.deleteData()
                }
            })
        }
    }

//There are different methods to retrieve the credentials based on the auth type so you first need to know which type of authentication is being used

     func getProvider(){
        if let providerData = FIRAuth.auth()?.currentUser?.providerData {
            for userInfo in providerData {
                switch userInfo.providerID {
                case "facebook.com":
                    if let credential = facebookCredential(){
                        self.reauthenticate(credential: credential)
                    }
                case "google.com":
                    if let credential = googleCredential(){
                        self.reauthenticate(credential: credential)
                    }
                    print("user is signed in with google")
              case "password":
                    let alert = UIAlertController(title: "Sign In", message: "Please Sign In again to your Locket account to confirm that you want to delete all your data", preferredStyle: .alert)
                    alert.addTextField { (textField: UITextField) in
                        textField.placeholder = "Email"
                    }
                    alert.addTextField { (textField: UITextField) in
                        textField.placeholder = "Password"
                        textField.isSecureTextEntry = true
                    }
                    let noAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

                    let yesAction = UIAlertAction(title: "OK", style: .destructive, handler: { (action:UIAlertAction) in
                         let emailTextField = alert.textFields![0]
                         let passwordTextField = alert.textFields![1]

                        if let credential = self.emailCredential(email: emailTextField.text!, password: passwordTextField.text!){
                            self.reauthenticate(credential: credential)
                        }else{
                            print("error")
                        }
                    })
                    alert.addAction(yesAction)
                    alert.addAction(noAction)

                self.present(alert, animated: true, completion: nil)
                default:
                print("unknown auth provider")


                }
            }
            }
        }

   func reauthenticate(credential:FIRAuthCredential){
        FIRAuth.auth()?.currentUser?.reauthenticate(with: credential) { error in
            if let error = error {
                print("reauth error \(error.localizedDescription)")
            } else {
                print("no reauth error")
                self.deleteData()
            }
        }
    }

    func facebookCredential() -> FIRAuthCredential? {
        let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
        return credential
    }

    func emailCredential(email:String,password:String) -> FIRAuthCredential? {
       let credential = FIREmailPasswordAuthProvider.credential(withEmail: email, password: password)
       return credential
    }

    func googleCredential() -> FIRAuthCredential? {
        guard let user = GIDSignIn.sharedInstance().currentUser else {return nil}
        guard let authentication = user.authentication else {return nil}
        let credential = FIRGoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
        return credential
    }


     func deleteData(){
            // Delete all other data related to user
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Firebase 中删除 Google 或 Facebook 用户 的相关文章

  • iOS 确定视频中的帧数

    如果我有一个 Swift 中的 MPMoviePlayerController MPMoviePlayerController mp MPMoviePlayerController contentURL url 有没有办法获取视频中的帧数u
  • iOS 何时清理本地应用程序 ./tmp 目录?

    iOS什么时候清理本地应用程序 tmp目录 请注意 这不是一个骗局这个问题 https stackoverflow com questions 3593900 iphone storage in tmp directory 我问的是应用程序
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • Swift Siesta 访问响应原始数据

    我的 API 中有一个返回 PDF 文件内容的方法 如何在成功回调中获取响应的原始数据 所有午睡响应均以原始数据开始 以基础类型的形式Data 然后运行变压器管道 http bustoutsolutions github io siesta
  • 如何使用逗号和行分隔符对字符串进行标记

    我正在 Swift 中制作一个简单的 String Tokenizer 就像在 Java 中一样 但这对我来说确实不起作用 我的数据源中每行的末尾用 分隔 数据用逗号分隔 例如 字符串 1 字符串 2 字符串 3 字符串 1 字符串 2 字
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • gestureRecognizer shouldReceiveTouch 持续存在于已释放的视图中导致崩溃

    我有一个相当简单的 UITableView 它在堆栈上推送一个新视图 新视图有一个像这样初始化的gestureRecognizer synthesize swipeGestureLeft void viewDidLoad swipeGest
  • 无法在 xcode 8 beta 6 上编译 AWS CustomIdentityProvider

    我在 iOS 应用程序中使用 Amazon Cognito 和 Facebook 登录 直到 beta 5 为止此代码从这个SO线程 https stackoverflow com questions 37597388 aws cognit
  • Bootstrap 响应式表格在 iOS 设备上无法垂直滚动

    这就是我所拥有的 div class table responsive table class table style background transparent table div 我正在使用以下 bootstrap css 文件 ht
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • 尝试部署 firebase 函数部署错误:无法配置触发器[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我的云功能可以正常工作 现在我尝试部署云功能 我得到了 Error functions limitTasksPerCreatorF
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 使用 PDFOutline 将 TOC 添加到 Swift/Cocoa 中的 PDFDocument

    我正在开发一个小程序 将多个单页 PDF 合并到一个多页 PDF 中 我正在 Swift4 MacOS Cocoa 中工作 但我一生都无法在 Swift 中找到任何类型的示例来创建大纲 仅遍历现有的大纲 我对此非常熟悉 使用对文档的最佳猜测
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 从应用程序内发送电子邮件中的图像和文本

    如何从我的应用程序内通过电子邮件发送图像和文本 表格数据形式 请大家帮忙并提出建议 谢谢 void sendMailWithImage UIImage image if MFMailComposeViewController canSend

随机推荐

  • 如何使用 psycopg2 从具有键值对的 postgres 表中检索某个键的值

    我是新来的python 尝试使用psycopg2读书Postgres 我正在从名为部署的数据库表中读取数据 并尝试处理具有三个字段 id Key 和 value 的表中的值 import psycopg2 conn psycopg2 con
  • 如何从水晶报表的 ExportToStream 中的 Web API 中获取 pdf 流?

    我在通过流媒体将水晶报告导出为 pdf 时遇到问题 我使用 Web Api 并据称将 pdf 流返回给我的客户端 即 angularJS 这是我的代码 服务器端 控制器 Route api transcript HttpPost publi
  • 当在 JList 中选择一个项目时,我将如何编码?

    我有一个 JList 其中有 5 个选项 当选择或单击其中一个项目时 我希望它旁边的文本区域显示与所单击的项目相关的一段文本 它应该对列表中的每个项目执行此操作 但我似乎无法找到如何在 API 中执行此操作 我的程序如何知道 JList 中
  • OS X:列出并删除带有空格的文件

    我想在 OS X 中执行此操作 ls rt xargs rm i 然而 rm因某些文件有空格而感到窒息 我提到 OS X 是因为 BSD 版本ls没有 Q flag 有没有一种方法可以做到这一点而无需使用find print0 sgeorg
  • 区分数据类型和数据结构

    好吧 不知何故 即使在阅读了很多教科书 真的很多 和在互联网上阅读了很长一段时间后 我仍然无法完全理解所提到的两个事物之间的区别是什么 为了简化问题 根据维基百科 数据类型是 识别各种类型数据之一的分类 例如实数 整数或布尔值 确定该类型的
  • 数字列表的平均值,以字符串形式存储在 Python 列表中

    我想计算python中几个列表的平均值 这些列表包含数字作为字符串 空字符串不是零 它意味着缺少值 我能想到的最好的就是这个 有没有更优雅 简洁 高效的写法 num 1 2 6 total sum int n if n else 0 for
  • 如何在 Mac 上安装 jmeter?

    我们想使用 JMeter 我已按照用户手册中的指示下载了生产版本 http jmeter apache org usermanual get started html http jmeter apache org usermanual ge
  • Dagger 2 无法访问 Retrofit

    我正在尝试使用 Dagger 2 带有 Android 模块 向我的存储库提供一个 Retrofit 实例 购买时我遇到错误 错误 无法访问改造 其他实例 例如毕加索 注入成功 我只是在改造方面遇到问题 我的模块 Module class
  • numpy.std 和 excel STDEV 函数有什么区别吗?

    我有一个清单 s 0 995537725 0 994532199 0 996027983 0 999891383 1 004754272 1 003870012 0 999888944 0 994438078 0 992548715 0 9
  • javascript 数组中的 JSON 导致错误无法读取属性

    我有一些 javascript 已经一年多没有改变了 突然它就坏了 所以我的第一个想法是它一定与数据有关 从数据来看 结构已经一年多没有发生变化 运行了很长一段时间都好好的 突然就坏了 这是我的 js 用一些 JSON 填充数组 var h
  • Spring Sleuth 在向 Zipkin 发送 10% 的请求时卡住了

    默认情况下 Spring Sleuth 仅向 Zipkin 发送 10 的请求 通过设置spring sleuth sampler percentage你可以增加百分比 不幸的是 无论我将其设置为什么值 它都停留在 10 我尝试过1 0 0
  • 如何在pygame中使圆从一个角到另一个角对角移动

    我创建了一个程序来对形状进行动画处理 并且只移动了 x 轴或 y 轴 而从未同时移动过这两个轴 所以对角移动对我来说是全新的 下面是我的代码 Author Victor Xu Date January 20th 2021 Descripti
  • 在sklearn中保存MinMaxScaler模型

    我正在使用MinMaxScalersklearn 中的模型用于标准化模型的特征 training set np random rand 4 4 10 training set 6 01144787 0 59753007 2 0014852
  • InvalidOperationException:集合已修改 - 尽管锁定了集合

    我有一个同步哈希表 我定期从中删除一些条目 多个线程运行此代码 因此 我锁定了整个 foreach 但有时仍然会收到 InvalidOperationException Collection was generated at Hashtab
  • 该类不符合键的键值编码[重复]

    这个问题在这里已经有答案了 我目前正在通过 Jeff LaMarche 的 iPhone 4 开发入门 学习如何为 iPhone 编写代码 但遇到了一个问题 我似乎看不出问题出在哪里 我在许多论坛上读到 这是 IBOutlet 连接不正确的
  • 给定运行时数据,如何知道排序程序是使用冒泡排序还是插入排序?

    我测量了一个排序程序 算法 并根据运行时数据 将其范围缩小为两种排序算法 冒泡排序和插入排序 有没有办法确定它是哪一个 当然是在不知道代码的情况下 它们都有相同的时间复杂度 我已经没有主意了 时间复杂度数据 排序 O n 1000 个数字所
  • Android 谷歌地图 api v2 夜间模式

    我正在开发一个使用全屏谷歌地图 API 2 的Android应用程序 例如 使用我的应用程序的司机希望在晚上 10 点到早上 6 点之间使用 夜间模式 这在 Android 中可能吗 将地图模式更改为 夜间 类似于Android手机中已有的
  • 我可以控制 IE 10 选择框的位置吗?

    在 Internet Explorer 10 中 下拉框的行为
  • C++ 从字符串中去除非 ASCII 字符

    在开始之前 是的 我知道这是一个重复的问题 是的 我已经查看了发布的解决方案 我的问题是我无法让他们工作 bool invalidChar char c return isprint unsigned c void stripUnicode
  • 从 Firebase 中删除 Google 或 Facebook 用户

    要从身份验证选项卡中删除用户 我使用以下代码 if let user FIRAuth auth currentUser user delete completion nil 当用户使用电子邮件 密码组合注册时 这工作得很好 但当他们使用社交