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


74

新文档中的(不清楚)示例:

var user = firebase.auth().currentUser;
var credential;
// Prompt the user to re-provide their sign-in credentials
user.reauthenticateWithCredential(credential).then(function() {

我应该如何创建该credential对象?

我试过了:

  • reauthenticateWithCredential(email, password) (类似于登录方法)
  • reauthenticateWithCredential({ email, password }) (文档仅提及一个参数)

没有运气 :(

PS:我不算在新文档中搜索相关信息所浪费的时间...我非常想念神话般的firebase.com文档,但想切换到v3或更高版本以使用firebase.storage ...

Answers:


162

我设法使其正常工作,应该对文档进行更新以包括那些不想在过多但难于阅读的参考文献中花太多时间的人。

凭证对象的创​​建方式如下:

const user = firebase.auth().currentUser;
const credential = firebase.auth.EmailAuthProvider.credential(
    user.email, 
    userProvidedPassword
);
// Now you can use that to reauthenticate
user.reauthenticateWithCredential(credential);

我在路上 :)
adolfosrs

5
很高兴得知您找到了解决方案!我将添加注释以更新/阐明文档。并且请记住,每个页面上都有一个用于该特定目的的反馈按钮。:-)
Frank van Puffelen

33
3年后,文档仍然需要更新!谢谢您节省我的时间。
拉廷·索塔尼(Ramtin Soltani),

9
4年后...然而,该文档仍然“详尽无遗,但难于阅读”
Nik

1
@Oliver,此代码与用户何时需要重新认证(因此方法名称)有关。在这种情况下,就像登录表单一样,他们需要再次提供密码。切勿自己存储用户密码。(或者,做得好,但在那种情况下您不使用Firebase auth :))
Pandaiolo

32

完整答案-您可以使用以下方法:

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

请注意,这reauthenticateWithCredential是的更新版本reauthenticate()


4
感谢您添加公认的答案中缺少的第三行
罗默(Rohmer)

1
@Oliver密码应该是该电子邮件中已经存在的密码。
maudulus

不知道这是@Sandokan,在这里看到:firebase.google.com/docs/reference/js/... -你在哪里看到它过时?
maudulus

@Sandokan我相信你是错误的- reauthenticateAndRetrieveDataWithCredential被弃用:firebase.google.com/docs/reference/js/...
maudulus

@maudulus。是。你是对的。就我而言,这是firebase版本问题。我正在使用firebase5.7。firebase.User.prototype.reauthenticateWithCredential已弃用。请改用firebase.User.prototype.reauthenticateAndRetrieveDataWithCredential。
山多根

0

我同意有关文档尚不清楚。但在API的参考,我发现找深一点firebase.auth.AuthCredential这个,我想你应该寻找将它传递给reauthenticate()

我在这里猜测,但是我将开始尝试记录日志firebase.auth()以查看是否存在任何credential对象。

我想它将看起来像以下内容:

user.reauthenticate(firebase.auth().credential).then(function() {

我设法使其正常工作,我正在写一个答案。您忘记了答案中的电子邮件和密码:)
Pandaiolo 2016年

0

现在,由于两个发布的答案均已弃用,因此该方法有了微小的变化,

    val user = auth.currentUser
    user?.let { _user ->
        val credentials = EmailAuthProvider.getCredential(
            _user.email!!,
            "userPassword"
        )
        _user.reauthenticate(credentials).addOnCompleteListener { _reauthenticateTask ->
  }

-1
final FirebaseUser fireBaseUser = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider.getCredential(fireBaseUser.getEmail(), storedPassword);
fireBaseUser.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
     @Override
     public void onComplete(@NonNull Task<Void> reAuthenticateTask) {
          if (!reAuthenticateTask.isSuccessful())
               ...
     }
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.