即使重新验证后,更新密码错误验证/需要最近登录

问题描述 投票:0回答:1

我在

"firebase": "^10.13.0"
next.js 14.2
中使用
typescript
进行用户身份验证。

我无法更新用户密码,因为即使在重新身份验证后,我仍然不断收到

auth/requires-recent-login
错误。

我认为重新验证后,用户在上次登录再次“太久以前”之前至少有一分钟的时间来更新密码。

我现在在成功重新验证后直接调用 updatePassword 函数,但即使这样也不起作用。

这是我的工作流程:

updateUserPassword

function updateUserPassword(password: string): void {
  const auth = getAuth();
  const user = auth.currentUser;

  if (user) {
    updatePassword(user, password)
      .then(() => {
        console.log("Password updated!");
      })
      .catch((error: Error) => {
        console.log("Error updateUserPassword: " + error.message);
        if (error.message.includes("auth/requires-recent-login")) {
          console.log("reauthUser");
          reauthUser(password);
        }
      });
  } else {
    console.log("User is not authenticated");
  }
}

reauthUser

const reauthUser = async (password: string): Promise<void> => {
  const auth = getAuth();

  if (auth.currentUser) {
    const providerId = auth.currentUser.providerData[0]?.providerId;
    console.log("providerId: ", providerId);

    if (providerId === "google.com") {
      await reauthWithGoogle();
      updatePassword(auth.currentUser, password)
        .then(() => {
          console.log("Password updated!");
        })
        .catch((error: Error) => {
          console.log(
            "Error updateUserPassword in reauthUser: " + error.message,
          );
        });
    } else {
      alert("Unsupported authentication provider.");
    }
  } else {
    router.push(ROUTES.signin);
  }
};

reauthWithGoogle

const reauthWithGoogle = async (): Promise<void> => {
  const auth = getAuth();
  googleProvider.setCustomParameters({ prompt: "select_account" });

  if (auth.currentUser) {
    reauthenticateWithPopup(auth.currentUser, googleProvider)
      .then(async (result) => {
        console.log("reauthenticateWithPopup");
      })
      .catch((error) => {
        alert("Error reauthenticateWithPopup: " + error.message);
      });
  } else {
    router.push(ROUTES.signin);
  }
};
javascript typescript firebase next.js firebase-authentication
1个回答
0
投票

当涉及到 Firebase 身份验证 时,有一些操作可以被视为敏感。例如,更改(更新)用户密码“确实”是一项安全敏感操作,需要用户最近登录。所以每次需要执行此类操作时,都应该重新验证用户身份。 有两种解决方案可以帮助您解决此问题,您可以通过要求凭据而不注销来重新验证用户,也可以注销用户并让用户再次进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.