【问题标题】:Can you validate whether a user has been recently authenticated on Firebase (Swift)?您能否验证用户最近是否已在 Firebase (Swift) 上进行身份验证?
【发布时间】:2022-01-11 15:00:42
【问题描述】:

有没有办法检查用户最近是否在 Firebase 上进行了身份验证,以避免在尝试删除用户时出现此消息:“此操作很敏感,需要最近的身份验证。在重试此请求之前再次登录。”

我一直在尝试将 lastSignInDate(如下)与当前时间进行比较,但似乎存在很大的误差,这可能会导致问题:

firebase.auth().currentUser.metadata.lastSignInTime

是否有任何函数可以返回关于用户最近是否经过身份验证的简单布尔值,以便 user.delete() 函数能够正常工作?

非常感谢!

【问题讨论】:

  • 你能在 Firebase 中使用云函数吗?
  • 处理登录新近度的惯用方法是捕获从 API 调用返回的错误。不建议尝试预先检测病情。
  • 完全理解弗兰克,唯一的小问题是我希望在删除用户时删除 Firestore 条目,但如果我等待 API 调用上的错误来定义是否删除条目然后无法删除它们(因为需要身份验证的 Firestore 安全规则)。你建议如何最好地做到这一点?是写云函数的案例吗?

标签: swift firebase firebase-authentication


【解决方案1】:

最好的方法是检查响应是否有错误,如下所示:

let user = Auth.auth().currentUser
user.delete { error in
  if let error = error {
    if (error.code == "auth/requires-recent-login") {
      // The user's credentials are too old. Prompt Login screen.
    }
  } else {
    // ...
  }
}

根据Firebase Documentation,除了将当前日期与firebase.auth().currentUser.metadata.lastSignInDate 进行比较之外,没有其他方法可以解决此问题(仅当您的应用程序上有Admin SDK,但您很可能不需要它来启用用户删除自己)。

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 2017-05-15
    • 2017-05-14
    • 2019-11-22
    • 2015-11-08
    • 2016-09-26
    • 2021-05-01
    • 2020-01-17
    相关资源
    最近更新 更多