You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Next-Auth集成Facebook登录时遇self_signed_cert_in_chain错误

Next-Auth集成Facebook OAuth登录时出现自签名证书链错误的解决方案

问题描述

我正在跟随YouTube上的克隆项目教程开发,在集成Facebook OAuth登录时遇到问题。已在Facebook开发者平台创建应用,并使用其凭证配置Next-Auth,但尝试登录时出现错误,当前运行地址为localhost:3000。

(1) 配置代码

import NextAuth from "next-auth";
import FacebookProvider from "next-auth/providers/facebook";
export const authOptions = {
  // Configure one or more authentication providers
  providers: [
    FacebookProvider({
      clientId: process.env.FACEBOOK_CLIENT_ID,
      clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
    }),
    // ...add more providers here
  ],
};
export default NextAuth(authOptions);

(2) 控制台错误

[next-auth][error][OAUTH_CALLBACK_ERROR] 
https://next-auth.js.org/errors#oauth_callback_error self signed certificate in certificate chain {
  error: Error: self signed certificate in certificate chain
      at TLSSocket.onConnectSecure (node:_tls_wrap:1532:34)
      at TLSSocket.emit (node:events:527:28)
      at TLSSocket.emit (node:domain:475:12)
      at TLSSocket._finishInit (node:_tls_wrap:946:8)
      at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:727:12) {
    name: 'OAuthCallbackError',
    code: 'SELF_SIGNED_CERT_IN_CHAIN'
  },
  providerId: 'facebook',
  message: 'self signed certificate in certificate chain'
}

(3) 浏览器提示

Facebook登录错误提示

解决方案

这个错误是Node.js验证Facebook的SSL证书时,检测到自签名证书(通常是本地代理/防火墙的证书干扰)导致的,可通过以下方式解决:

方法1:临时禁用Node.js SSL证书验证(仅开发环境)

启动Next.js项目时添加环境变量跳过证书验证:

NODE_TLS_REJECT_UNAUTHORIZED=0 npm run dev

Windows PowerShell环境执行:

$env:NODE_TLS_REJECT_UNAUTHORIZED=0; npm run dev

⚠️ 注意:此方法仅限本地开发使用,生产环境绝对不能启用,会带来安全风险。

方法2:在Next-Auth配置中禁用证书验证

针对Facebook Provider添加httpOptions配置,跳过证书校验:

import NextAuth from "next-auth";
import FacebookProvider from "next-auth/providers/facebook";
export const authOptions = {
  providers: [
    FacebookProvider({
      clientId: process.env.FACEBOOK_CLIENT_ID,
      clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
      httpOptions: {
        rejectUnauthorized: false,
      },
    }),
  ],
};
export default NextAuth(authOptions);

同样,该配置仅适用于开发环境,上线前需移除。

方法3:将自签名证书加入Node.js信任列表

如果是本地代理工具(如Charles、Fiddler)的证书,可将其导入Node.js信任根目录:

  1. 导出代理的根证书为.pem格式
  2. 执行node -p "require('path').dirname(require('tls').DEFAULT_CERT_PATH)"找到Node.js证书目录
  3. 将证书复制到该目录,再运行npm install -g ssl-root-cas更新信任列表
    此方法更安全,适合长期使用代理的开发场景。

额外检查:Facebook开发者平台配置

确保在Facebook开发者平台的应用设置中,正确添加回调地址:

  • 进入产品 > Facebook登录 > 设置,将有效的OAuth重定向URI设置为http://localhost:3000/api/auth/callback/facebook

内容的提问来源于stack exchange,提问作者choboCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:05:43