如何获取 oobCode 用于本地化目的

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

Firebase 仅允许使用一种语言发送确认电子邮件。整体做得很好的产品对于多语言应用程序来说毫无用处。我想制作自己的确认系统。唯一的问题是我如何获得在 firebase 内部生成的 oobCode。 site.com?mode=&oobCode=

谢谢你。

firebase firebase-authentication
3个回答
15
投票

目前无法通过 Firebase 身份验证 API 生成有效的

oobCode
值。它只能通过(正如您所说的“不可翻译”)电子邮件发送。

但是如果您愿意,您可以构建自己的电子邮件验证机制,使用您自己的确认码来验证电子邮件所有权。你会:

  1. 在服务器上生成随机的、不可猜测的代码
  2. 将其发送到用户的电子邮件地址,然后
  3. 当用户单击确认链接时,在您回拨的同一服务器上拥有自己的端点
  4. 此时,您可以使用 Firebase Admin SDK 将
    emailVerified
    属性设置为
    true

有关最后一步的示例,请参阅:https://firebase.google.com/docs/auth/admin/manage-users#update_a_user

感谢评论中的@Nikhil:或者,您可以完全进行自己的验证并使用 Admin SDK 将

emailVerified
设置为 true。有关示例,请参阅 Firebase 文档


0
投票

对于 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, "_");
}

0
投票

就我而言,我想做同样的事情,但是对于密码重置,两者的工作方式相同

  • 通过调用在服务器生成密码重置或电子邮件验证
  String link = FirebaseAuth.getInstance().generatePasswordResetLink(email);

或(用于验证)

  String link = FirebaseAuth.getInstance().generateEmailVerificationLink(email);
  • 从链接中提取oob代码
    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"
}
  • 我使用新密码和oob代码从服务器向此api进行api调用
https://identitytoolkit.googleapis.com/v1/accounts:resetPassword?key=

或(用于验证)

https://identitytoolkit.googleapis.com/v1/accounts:update?key=

参考:Firebase 身份验证 REST API 文档

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