Firebase9使用reauthenticateWithCredential改密码报类型错误如何解决
错误原因
signInWithEmailAndPassword是异步方法,返回的是Promise<UserCredential>类型的对象,你没有处理异步逻辑,直接把Promise实例传给了reauthenticateWithCredential,而后者要求传入的是AuthCredential类型的认证凭证,参数类型不匹配导致报错。- 你不需要调用
signInWithEmailAndPassword生成重认证所需的凭证,该方法的作用是直接执行登录操作,并非生成凭证。
修复方案
- 首先补充导入
EmailAuthProvider工具:
import { getAuth, reauthenticateWithCredential, EmailAuthProvider, updatePassword } from "firebase/auth";
- 替换凭证生成逻辑,使用对应Provider生成合法的认证凭证:
const auth = getAuth(); const user = auth.currentUser; // 用当前用户邮箱+输入的旧密码生成重认证需要的凭证 const credential = EmailAuthProvider.credential(user.email, this.oldPassword); reauthenticateWithCredential(user, credential).then(() => { // 重认证成功,此处执行修改密码逻辑 return updatePassword(user, this.newPassword); }).then(() => { console.log("密码修改成功"); }).catch((error) => { // 可根据error.code区分错误类型,比如旧密码错误、新密码强度不够等 console.log(error); });
注意:需要保证调用该逻辑时用户处于登录状态,
auth.currentUser不为空,否则需要先处理登录状态校验。
内容的提问来源于stack exchange,提问作者Noobmaster06
相关产品推荐
相关产品推荐

