You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase重新认证报错:闭包预期2个参数但仅传入1个

Firebase Auth 删除账户时闭包参数不匹配报错修复

问题情况

在基于Firebase实现用户账户删除功能时,调用reauthenticate方法触发报错:

Contextual closure type '(AuthDataResult?, Error?) -> Void' expects 2 arguments, but 1 was used in closure body

初始实现代码:

@IBAction func deleteAccount() {
        let user = Auth.auth().currentUser
        var credential: AuthCredential
                
        user?.reauthenticate(with: credential) { error in
            if let error = error {
                self.redAlert(message: "Unable to authenticate. Please try again.")
            } else {
                Auth.auth().currentUser?.delete { error in
                  if let error = error {
                      self.redAlert(message: "An error happened. Please contact support to delete your account")
                  } else {
                      self.greenAlert(message: "Your account has been deleted")
                  }
              }
            }
        }

问题原因

reauthenticate(with:completion:)方法的闭包要求接收两个参数:AuthDataResult?和Error?,但上述代码仅传入了error一个参数,不符合方法的定义规范。另外代码中credential变量未做实际初始化,也会导致后续运行异常。

解决代码

修正闭包参数并正确初始化认证凭证后,完整可运行的代码如下:

@IBAction func deleteAccount(_send: Any) {
    let user = Auth.auth().currentUser
    let emailText: String = email.text!
    let passwordText: String = password.text!
    var credential: AuthCredential = EmailAuthProvider.credential(withEmail: emailText, password: passwordText)
    
    user?.reauthenticate(with: credential, completion: { (result, error) in
        if let error = error {
            self.redAlert(message: "Unable to authenticate. Please try again.")
        } else {
            Auth.auth().currentUser?.delete { error in
              if let error = error {
                  self.redAlert(message: "An error happened. Please contact support to delete your account")
              } else {
                  self.greenAlert(message: "Your account has been deleted")
                  self.stopLoading()
                  self.logout()
              }
          }
        }
    })
    
}

核心修正点

  • 为reauthenticate的闭包补充第一个参数result(即使业务逻辑中不需要使用,也需遵循方法定义传入)
  • 通过EmailAuthProvider.credential(withEmail:password:)生成有效的用户认证凭证,完成重新验证流程
  • 新增了账户删除成功后的加载停止与登出逻辑,完善流程完整性

内容的提问来源于stack exchange,提问作者anchovy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:25:10