Firebase:请求最近登录

Luc*_*gue 5 javascript firebase-authentication

我正在处理FirebaseWeb身份验证。该文件指出

某些安全性敏感的操作(例如删除帐户,设置主电子邮件地址和更改密码)要求用户最近登录。

否则,请求将失败,并显示错误代码auth/requires-recent-login,我应通过提示用户重新插入其凭据来处理该情况。完成此操作后,我可以使用以下代码轻松地重新验证用户身份:

firebase.auth().currentUser.reauthenticate(credential)
Run Code Online (Sandbox Code Playgroud)

API 参考中有更多详细信息。原来credential实际上是一个类型的对象firebase.auth.AuthCredential。话虽这么说,我仍然有很多问题在文档中找不到答案:

  1. 如何创建AuthCredential对象?
  2. 更重要的是,我如何与提供商(Google,Facebook等)打交道。我同意更改电子邮件/密码对提供商无济于事,因为这不是更改它们的正确位置,因此在这种情况下不适用重新认证。但是,删除用户仍然是需要重新认证的操作,并且可以执行此操作而与认证方法无关。如何重新验证使用提供商登录的用户?
  3. 文档指出用户必须最近登录。我在文档中找不到最新的定义。

boj*_*eil 5

  1. 您可以通过在任何提供程序(包括电子邮件/密码提供程序)上调用凭证静态方法来初始化凭证: firebase.auth.FacebookAuthProvider.credential(fbAccessToken);

  2. 要重新验证 OAuth 提供程序,您可以在浏览器中调用 signInWithPopup 或重定向。这将返回一个具有 2 个字段的对象:用户和凭据。您可以直接使用该凭据。这是一个简化的示例:

    var tempApp = firebase.initializeApp(originalConfig, 'temp'); var provider = new firebase.auth.FacebookAuthProvider(); tempApp.signInWithPopup(provider).then(function(result)) { tempApp.auth().signOut(); originalApp.auth().currentUser.reauthenticate(credential); });

  3. 这并不重要,因为 Firebase 身份验证后端可能会改变这一点。你不应该硬编码这个值。而是尝试捕获该错误并在它发生时采取适当的行动。

  • 顺便说一句,现在支持“reauthenticateWithPopup”。答案已经过时了。对于密码重新身份验证,您可以执行以下操作: `firebase.auth().currentUser.reauthenticateWithCredential(firebase.auth.EmailAuthProvider.credential('user@example.com', 'password'))` (2认同)