You need to enable JavaScript to run this app. Facebook登录报Cannot redefine property: cookie未捕获Promise错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Facebook登录报Cannot redefine property: cookie未捕获Promise错误求助

问题原因

该错误由浏览器端安装的隐私保护/广告拦截类扩展触发,这类扩展为了实现反跟踪功能,会尝试重写document.cookie属性拦截Cookie读写,且重写时未设置configurable: true标识,而你在Facebook SDK初始化时开启了cookie: true配置,SDK的Cookie操作逻辑会触发第二次cookie属性重写,直接抛出不可重定义的错误。
你的业务代码和Facebook官方SDK本身没有逻辑问题。

验证方案
  • 切换浏览器无痕模式,或者禁用所有已安装的浏览器扩展后重新加载页面,若错误消失即可确认是扩展冲突导致
  • 使用无额外扩展的原生浏览器打开页面测试,也可验证问题来源
可行解决方案

方案1:修改SDK初始化配置(优先推荐)

如果你的业务逻辑不需要后端直接读取Facebook生成的Cookie,仅需要前端获取accessToken传给后端做校验,直接将FB初始化配置中的cookie: true改为cookie: false即可,该改动不会影响常规登录流程的正常运行:

FB.init({
    appId: '***MYAPPID***',
    cookie: false, // 关闭Cookie写入即可避免和扩展的重写逻辑冲突
    xfbml: true,  
    version: 'v10.0' 
});

方案2:添加错误捕获兜底

如果业务必须开启cookie: true配置,可以给初始化逻辑添加错误捕获,忽略该非致命错误,避免阻塞后续业务代码执行:

window.fbAsyncInit = function () {
    try {
        FB.init({
            appId: '***MYAPPID***',
            cookie: true, 
            xfbml: true,  
            version: 'v10.0' 
        });
        FB.getLoginStatus(function (response) {
            statusChangeCallback(response);
        });
    } catch (err) {
        // 仅忽略Cookie重定义错误,其他异常继续抛出
        if (!err.message.includes('Cannot redefine property: cookie')) {
            throw err;
        }
        // 错误不影响登录状态获取,可主动触发一次状态校验
        FB.getLoginStatus(function (response) {
            statusChangeCallback(response);
        });
    }
};

方案3:用户引导

如果业务强依赖Facebook SDK的Cookie能力,可在捕获到对应错误时,弹出提示引导用户临时禁用相关隐私拦截扩展后再使用登录功能。


内容的提问来源于stack exchange,提问作者Aşkın

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:24:01