如何创建“credential”对象,以便Firebase Web用户能够使用reauthenticateWithCredential()方法?

8 浏览
0 Comments

如何创建“credential”对象,以便Firebase Web用户能够使用reauthenticateWithCredential()方法?

新文档中,这个例子不是很清楚:

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...

admin 更改状态以发布 2023年5月24日
0
0 Comments

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

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

请注意,reauthenticateWithCredentialreauthenticate()的更新版本。

0
0 Comments

我设法使它工作,文档应该更新,包括这个对于那些不想花太多时间在详尽但难以阅读的 API 参考中的人来说。

Firebase 8.x

凭据对象是这样创建的:

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

Firebase 9.x

(感谢 @Dako Junior的答案,我将其添加在这里以保证详尽性)

import {
    EmailAuthProvider,
    getAuth,
    reauthenticateWithCredential,
} from 'firebase/auth'
const auth = getAuth()
const credential = EmailAuthProvider.credential(
    auth.currentUser.email,
    userProvidedPassword
)
const result = await reauthenticateWithCredential(
    auth.currentUser, 
    credential
)
// User successfully reauthenticated. New ID tokens should be valid.

注意

有些人问 userProvidedPassword 是否是第一次登录时存储的变量。它不是,应该在一个新的对话框/页面中打开一个密码输入框,然后用户将再次输入他们的密码。

我坚持认为,你不应该 尝试通过明文存储用户密码来绕过此问题。这是一个应用程序的正常特性。在 GMail 中,有时会出现会话过期、存在黑客嫌疑、更改位置等情况。GMail 会再次要求输入您的密码。这是重新认证。

它不会经常发生,但使用 Firebase 的应用程序应该支持这一点,否则用户会在某些时候受阻。

0