Firebase邮箱链接认证:sendSignInLinkToEmail发送无效URL问题
嘿,我之前也踩过这个坑!邮件能正常发送但链接无效,大概率是actionCodeSettings配置或者控制台白名单的问题,咱们一步步来排查:
先检查控制台的授权域名配置
打开Firebase控制台,进入「Authentication」→「Sign-in method」→「Authorized domains」,确认你已经把http://localhost:3000添加进去了。注意端口号必须和本地服务完全匹配,多一个少一个数字都会导致链接失效。补全
actionCodeSettings的关键参数
你的代码里提到内容截断了,Web应用的actionCodeSettings有个核心参数不能缺:var actionCodeSettings = { url: "http://localhost:3000", handleCodeInApp: true, // 划重点!Web应用必须开启这个,否则Firebase生成的链接无法正确识别你的应用 // 如果你没有iOS/Android端,下面的平台配置可以暂时注释或省略 iOS: { bundleId: "com.example.ios" }, android: { packageName: "com.example.android", installApp: true, minimumVersion: "12" } };要是没设置
handleCodeInApp: true,Firebase生成的链接会默认跳转到官方页面,而不是你的应用,自然会显示无效。确认登录方法的启用状态
回到「Sign-in method」页面,确保「Email/Password」和「Email link (passwordless sign-in)」这两个选项都已经开启,少一个都可能导致链接无法被正确解析。检查URL的拼写和协议
确认url参数的协议(http/https)和地址拼写完全正确,比如别把localhost写成localost,本地测试用http没问题,但生产环境必须换成https。可选:解析链接排查问题
把邮件里的链接复制出来,用Firebase的工具解析看看具体问题:firebase.auth().parseActionCode('链接中的actionCode部分') .then((info) => { console.log(info); // 能打印出用户邮箱说明code本身有效,问题在跳转配置 }) .catch((error) => { console.error(error.code, error.message); // 根据错误码找原因,比如invalid-action-code说明code已过期或无效 });
如果还是没解决,可以把完整的actionCodeSettings配置和控制台白名单的截图(打码敏感信息)放上来,我再帮你深挖!
内容的提问来源于stack exchange,提问作者Filipe Picoito

