Firebase Admin SDK为Identity Platform多租户生成邮件链接时如何配置独立Action URL
解决方案
你需要的能力是Identity Platform原生支持的,有两种落地方式可以选择:
方案1:调用生成链接接口时动态传入自定义域名
Firebase Admin SDK的generatePasswordResetLink方法支持传入第二个参数ActionCodeSettings,可以直接指定本次生成链接使用的自定义Action URL,不需要依赖全局或租户级的预设配置,示例代码如下:
let tenantId = 'tenant-b-5678'; let email = 'foo@b.example.com'; // 租户与域名的映射可以存储在Cloud Firestore/Secret Manager等托管服务中,不需要硬编码在业务代码里 const tenantDomainMap = { 'tenant-a-1234': 'https://a.example.com', 'tenant-b-5678': 'https://b.example.com' }; const auth = admin.auth().tenantManager().authForTenant(tenantId); auth .generatePasswordResetLink(email, { url: `${tenantDomainMap[tenantId]}/reset-password`, // 这里传入对应租户的自定义Action URL handleCodeInApp: false }) .then((resetUrl) => { console.log(resetUrl); // 生成的链接会直接使用你传入的域名 });
方案2:租户层级独立配置邮件模板Action URL
你可以直接在Identity Platform的租户配置中为每个租户单独设置邮件模板的Action URL,配置完成后调用generatePasswordResetLink时不需要额外传参,会自动使用对应租户的配置生成链接,无需维护域名映射:
// 给指定租户配置独立的密码重置邮件模板(仅需执行一次,不需要每次生成链接都调用) async function setTenantEmailTemplate(tenantId, domain) { const tenantAuth = admin.auth().tenantManager().authForTenant(tenantId); await tenantAuth.updateEmailTemplate('RESET_PASSWORD', { subject: '重置你的账户密码', body: '点击以下链接重置密码: %LINK%', actionUrl: `${domain}/reset-password` }); } // 执行配置(首次创建租户时调用即可) await setTenantEmailTemplate('tenant-a-1234', 'https://a.example.com'); await setTenantEmailTemplate('tenant-b-5678', 'https://b.example.com'); // 后续生成链接时和原有代码逻辑完全一致,自动使用租户独立配置的Action URL let tenantId = 'tenant-b-5678'; let email = 'foo@b.example.com'; const auth = admin.auth().tenantManager().authForTenant(tenantId); const resetUrl = await auth.generatePasswordResetLink(email);
内容的提问来源于stack exchange,提问作者anothermh
相关产品推荐
相关产品推荐

