【问题标题】:Firebase: How to re-authenticate custom authenticated users?Firebase:如何重新验证自定义经过身份验证的用户?
【发布时间】:2018-07-24 12:35:04
【问题描述】:

我已成功实现自定义身份验证系统(不是电子邮件和密码正常身份验证),如我后端的文档中所示:

服务器端:

authAdmin.auth().createCustomToken(uid)
 .then(customToken => {
   response.send({token: customToken});
}).catch(error => {
  console.log(error)
  response.status(500).send(error);
});

客户端:

let token = response.json().token;
firebase.auth().signInWithCustomToken(response.token).then(user => {
   // Code
}).catch(function(error) {
   console.log(error)
});

现在我需要删除创建的帐户,因为该帐户需要重新进行身份验证才能删除,否则必须重新进行身份验证。 我检查了文档,发现了这个:

currentUser.reauthenticateAndRetrieveDataWithCredential(credential).then(() => {
  // Delete user
  currentUser.delete().then(() => {
    // User deleted 
  });
});

但是这个函数需要一个凭证对象。那么问题是如何从上面提供的自定义身份验证系统中制作凭证对象?

【问题讨论】:

  • 否定。这个问题询问有关重新验证电子邮件和密码验证用户的问题。我进行自定义身份验证。
  • 是的,我的错。所以你不能使用这些类中的任何一个 - firebase.google.com/docs/reference/js/firebase.auth#classes?
  • 除了使用 Facebook 等知名提供商之外,无法看到任何其他方式来创建凭证对象。

标签: javascript firebase firebase-authentication


【解决方案1】:

好的,这就是你的做法。您需要另一个 FirebaseApp。

var app2 = firebase.initializeApp(sameConfig, 'temp');
app2.auth().signInWithCustomToken(token).then(function(result) {
  // Confirm this is the same user as the default app.
  if (firebase.auth().currentUser.uid == result.user.uid) {
    // Overwrite the user in default instance.
    return firebase.auth().updateCurrentUser(result.user);
  }
  throw new Error('User mismatch!');
}).then(function() {
  // User reauthenticated. Remove temp user.
  app2.auth().signOut();
}).catch(function(error) {
  // Error occurred.
});

【讨论】:

  • 聪明的方法。因此,您基本上是从另一个应用程序重新登录用户,然后在主应用程序实例中更新最初签名的用户,最后将临时用户注销。非常聪明 !。一个问题,从另一个应用实例签署用户不会影响身份验证侦听器,因为它们是从主应用身份验证实例创建的吗?
  • app2 的authStateListeners 将在调用app2.auth().signInWithCustomToken 时触发。当updateCurrentUser被调用时,默认应用的authStateListeners不会触发,因为同一个用户登录。你可以测试它。尝试两次 signInWithCustomToken。只有第一次触发。如果同一用户多次登录但未退出,则不会触发状态更改。
猜你喜欢
  • 2020-04-01
  • 2022-12-10
  • 1970-01-01
  • 2020-10-13
  • 2020-08-24
  • 2016-10-18
  • 1970-01-01
  • 2018-03-28
  • 2022-08-10
相关资源
最近更新 更多