如何创建 Firebase web user.reauthenticate() 方法所需的“凭据”对象?

Posted

技术标签:

【中文标题】如何创建 Firebase web user.reauthenticate() 方法所需的“凭据”对象?【英文标题】:How to create “credential” object needed by Firebase web user.reauthenticate() method? 【发布时间】:2017-09-12 04:53:06 【问题描述】:
var user = firebase.auth().currentUser;
var credential;
// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential).then(function() 

使用 v3 Firebase 客户端,我应该如何为 Google 身份验证提供程序创建此凭据对象(不是电子邮件和密码)。

这里回答了如何使用电子邮件和密码进行操作:Email&Password。

我尝试过var credential = firebase.auth.GoogleAuthProvider.credential();,但根据docs,它需要一个“Google Id 令牌”,我不知道如何获得。

【问题讨论】:

打开console.firebase.google.com -> 转到“添加firebase webapp”复制粘贴sn-p。应该有你的令牌 我想你可能误解了。您复制和粘贴的配置是初始化 firebase。 firebase.initializeApp()。我正在寻找需要传递给firebase.auth.GoogleAuthProvider.credential() 的内容,以便重新验证登录用户。 您最初是如何登录该用户的?您使用的是 signInWithPopup/Redirect 吗? signInWithPopup How to create "credential" object needed by Firebase web user.reauthenticate() method?的可能重复 【参考方案1】:

您可以使用firebase.auth.EmailAuthProvider.credential 创建AuthCredential。

然后您可以使用firebase.User.reauthenticateWithCredential 重新进行身份验证。

var user = firebase.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
  user.email,
  'yourpassword'
);
user.reauthenticateWithCredential(credential);

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。 感谢@Badacadabra,我添加了一些上下文。 为什么投反对票?如果有问题,请发表评论,我会尽力帮助您。【参考方案2】:

您可以使用 reauthenticateWithPopup(provider) 或 reauthenticateWithRedirect(provider) 方法重新验证使用 GooglaAuth Provider 的用户而无需令牌和凭据:

// Create provider as usual
function createGoogleProvider() 
  const provider = new auth.GoogleAuthProvider()
  provider.addScope('profile')
  provider.addScope('email')
  return provider

// Reauthenticate with popup:
user.reauthenticateWithPopup(createGoogleProvider()).then(function(result) 
  // The firebase.User instance:
  var user = result.user;
, function(error) 
  // An error happened.
);

【讨论】:

以上是关于如何创建 Firebase web user.reauthenticate() 方法所需的“凭据”对象?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter WEB:Firebase:没有创建 Firebase 应用“[DEFAULT]”

如何保护部署到 Firebase Hosting 的 Flutter Web 的源代码?

如何:在注册/创建时设置 Firebase 用户的个人资料信息? (颤动网络)

如何保存我最近用 axios 创建的 firebase 中的数据并做出反应?

Flutter Web - Firebase:没有创建 Firebase App '[DEFAULT]' - 调用 Firebase App.initializeApp() (app/no-app)

如何调试 Firebase 安全规则/权限