javascript - 如何创建 Firebase web user.reauthenticateWithCredential() 方法所需的 "credential"对象?

标签 javascript firebase firebase-authentication

new docs 中的(不清楚的)示例:

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 的精彩文档,但想为 firebase.storage 切换到 v3 或更高版本...

最佳答案

我设法让它工作,文档应该更新以包含这个,以供那些不想在详尽但难以阅读的 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 中,有时您的 session 会过期,或者怀疑被黑客入侵、您更改位置等。GMail 会再次询问您的密码。这是重新认证。

这种情况不会经常发生,但使用 Firebase 的应用应该支持它,否则用户会卡在某个时候。

关于javascript - 如何创建 Firebase web user.reauthenticateWithCredential() 方法所需的 "credential"对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811684/

相关文章:

javascript - 遍历JavaScript中的数组

javascript - 大型 Firebase 查询的进度事件?

javascript - Firebase 身份验证。更新所有项目文件

typescript - Cloud Functions auth onCreate 触发器将用户添加到 Firestore

javascript - 在 Express 服务器中以 UTF-16 编码发送 JSON 响应

javascript - 从组件触发路由 Action

javascript - ResizeObserver 调用期间未捕获的 TypeError : chartObj. 宽度不是函数

firebase - Firebase 提供地理空间吗?

ios - 使用不同的谷歌帐户登录 Firebase iOS

firebase - 在 firebase 安全规则中使用提供者 uid