服务器端的 Firebase 电子邮件验证

问题描述

我有一个指向 Firebase 中认电子邮件验证功能链接。 从浏览器使用此链接可以正常工作,但是从服务器端使用以下代码时会失败:

  try {
    const url = `https://example.com/__/auth/action?mode=verifyEmail&oobCode=${oobCode}&apiKey=${apiKey}&lang=en`;
 
    const response = await axios.get(url);
    
    if (response.data.success) {
      return next();
    } else {
        return next(new ErrorResponse("Failed email verification",FORBIDDEN));
    }
  } catch (error) {
    return sendFailedWithErr(res,error.message);
  }

当我复制服务器端使用的 URL 时,完全相同的 URL 在浏览器中有效,但在服务器端失败。 如果您知道问题出在哪里,我们将不胜感激。

解决方法

这是因为对此 URL 的调用不会返回您可以检查的响应,例如 REST API 端点的响应,例如response.data.success

正如您将看到的 here,这个 URL 应该用于打开一个网页,您将在其中:

  1. 获取作为 QueryString 参数传递的值(例如 modeoobCode
  2. 从网页调用 Firebase JavaScript SDK 的一些方法,例如电子邮件验证中的 applyActionCode()

您也许可以从服务器模仿此操作,但我从未尝试过。