问题描述
我有一个指向 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 应该用于打开一个网页,您将在其中:
- 获取作为 QueryString 参数传递的值(例如
mode
或oobCode
) - 从网页调用 Firebase JavaScript SDK 的一些方法,例如电子邮件验证中的
applyActionCode()
。
您也许可以从服务器模仿此操作,但我从未尝试过。