如何使用应用子域名实现Facebook自动登录,无需逐个新增客户子域名
动态子域名场景下Facebook登录配置解决方案
首先明确Facebook JSSDK的域名校验规则:原生支持的子域名通配符配置有明确生效前提,若你之前配置*.website.com不生效,可按以下优先级选择可行方案:
方案1:主域名统一登录中转(最稳妥,无需随客户新增修改配置)
这是多动态子域名场景的通用兼容方案,步骤如下:
- 在主域名
website.com下部署独立的登录中转页,例如https://website.com/fb-login-proxy - 任意子域名触发Facebook登录需求时,跳转到上述中转页,URL携带当前子域名的回调地址参数
- 中转页调用Facebook JSSDK完成登录授权,获取到授权凭证后,通过postMessage或者URL参数将凭证回传给发起请求的源子域名
- 子域名接收凭证后写入本地登录态,完成登录流程
方案2:修正通配符配置(无需改业务逻辑,优先排查配置问题)
你之前配置通配符不生效,大概率是不符合Facebook的配置规则,按以下要求修正即可:
- 打开Facebook应用后台,进入「Facebook登录 > 设置」页面
- 在「JavaScript SDK 允许的域」列表中,同时添加
website.com和*.website.com,注意不要带协议、路径、端口,仅填写裸域名 - 在「有效的OAuth重定向URI」列表中添加主域名的登录相关页面完整地址,无需添加任何子域名地址
- 前端初始化FB SDK时,增加
cookie: true和domain: '.website.com'配置,确保登录态Cookie允许所有子域名读取
方案3:改用服务端OAuth授权码流(安全性更高,无域名校验问题)
完全弃用前端JSSDK的隐式授权流程,改用服务端实现的Authorization Code Flow:
- 所有子域名的登录请求统一跳转到主域名的服务端登录接口
- 服务端发起Facebook OAuth请求,重定向地址固定为主域名的回调接口
- 服务端拿到授权码兑换access_token后,将登录态写入根域名Cookie,所有子域名可直接读取该Cookie完成登录
内容的提问来源于stack exchange,提问作者Rogelio Carrera
相关产品推荐
相关产品推荐

