javascript - Firebase - 重新身份验证后更新密码时出现问题
问题描述
我想做什么?
- 重新验证用户,检查当前密码
(this.state.currentPassword)
- 更新新密码 (this.state.newPassword)
我面临什么问题?
- STEP 1 正在成功执行
- 但是当尝试执行第 2 步时,它会引发错误并从外部尝试获取错误,即“错误重新验证”
var user = firebaseApp.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
firebaseApp.auth().currentUser.email,
this.state.currentPassword
);
// Prompt the user to re-provide their sign-in credentials
// STEP 1 : re-authenticate user
user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
// User re-authenticated.
//Upon re-authenticating, update password
//STEP 2 : UPDATE PASSWORD
var newPassword = firebase.getASecureRandomPassword();
user.updatePassword(newPassword).then(function() {
alert("SUCCESS")
// Update successful.
}).catch(function(error) {
console.log(error)
// An error happened.
});
}).catch(function(error) {
// An error happened.
alert("Error Reauthenticating")
});
解决方案
不确定问题是什么,但能够通过以下代码获得所需的输出。
归功于这篇文章。
reauthenticate = (currentPassword) => {
var user = firebase.auth().currentUser;
var cred = firebase.auth.EmailAuthProvider.credential(
user.email, currentPassword);
return user.reauthenticateAndRetrieveDataWithCredential(cred);
}
changePassword = (currentPassword, newPassword) => {
this.reauthenticate(currentPassword).then(() => {
var user = firebase.auth().currentUser;
user.updatePassword(newPassword).then(() => {
console.log("Password updated!");
}).catch((error) => {
console.log(error);
});
}).catch((error) => {
console.log(error);
});
}
可能需要 ES6 语法,但明天会询问。
推荐阅读
- java - 为什么我的 try catch 语句不起作用?
- cuda - 在 MSVC 2017 中为 nvcc 设置 c++14 标准用法
- spring-boot - Spring Boot jackson non_null 属性不起作用
- python-3.x - 无法重新启动 neo4j,出现错误“设备上没有剩余空间”
- c# - 我必须在实体框架 6 中为 DbContext 使用“使用”块吗
- python - 如何有条件地使用 subprocess.call("taskkill /f /im java.exe")
- json - 开放 API 在路径中包含另一个组件
- c# - 安装 .net Framework 4.7.2 时,4.5.1 应用程序中的 TLS1.2 协商失败
- python - 在 psycopg2.execute 中重用参数
- python - Sublime 文本、缩进和 python 代码变得疯狂