Firebase 仅允许使用一种语言发送确认电子邮件。整体做得很好的产品对于多语言应用程序来说毫无用处。我想制作自己的确认系统。唯一的问题是我如何获得在 firebase 内部生成的 oobCode。 site.com?mode=&oobCode=
谢谢你。
目前无法通过 Firebase 身份验证 API 生成有效的
oobCode
值。它只能通过(正如您所说的“不可翻译”)电子邮件发送。
但是如果您愿意,您可以构建自己的电子邮件验证机制,使用您自己的确认码来验证电子邮件所有权。你会:
emailVerified
属性设置为 true
。有关最后一步的示例,请参阅:https://firebase.google.com/docs/auth/admin/manage-users#update_a_user
感谢评论中的@Nikhil:或者,您可以完全进行自己的验证并使用 Admin SDK 将
emailVerified
设置为 true。有关示例,请参阅 Firebase 文档。
对于 NodeJS,以下是生成类似于 Firebase 的 oob 代码的方法。
import crypto from "crypto";
function generateCode() {
// 54 length base64 string
let code = crypto.randomBytes(40).toString("base64");
// remove padding
code = code.replace(/=+$/, "");
return code.replace(/\+/g, "-").replace(/\//g, "_");
}
就我而言,我想做同样的事情,但是对于密码重置,两者的工作方式相同
String link = FirebaseAuth.getInstance().generatePasswordResetLink(email);
或(用于验证)
String link = FirebaseAuth.getInstance().generateEmailVerificationLink(email);
public String extractOOBCode(@RequestParam String email) {
try {
String link = FirebaseAuth.getInstance().generatePasswordResetLink(email);
logger.info(link);
// Extract the oobCode from the link
int startIndex = link.indexOf("oobCode=") + 8; // Index of 'oobCode=' plus its length
int endIndex = link.indexOf("&", startIndex); // Index of '&' after oobCode
if (startIndex != -1 && endIndex != -1) {
return link.substring(startIndex, endIndex);
} else {
throw new IllegalArgumentException("Invalid password reset link format");
}
} catch (FirebaseAuthException e) {
throw new RuntimeException(e);
}
}
使用stmp服务器将此代码发送到用户电子邮件
用户使用此oob代码和密码向我的服务器发出api请求
{
"oob":"code",
"newPassword":"newPassword"
}
https://identitytoolkit.googleapis.com/v1/accounts:resetPassword?key=
或(用于验证)
https://identitytoolkit.googleapis.com/v1/accounts:update?key=