使用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) 浏览器提示

解决方案
这个错误是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信任根目录:
- 导出代理的根证书为
.pem格式 - 执行
node -p "require('path').dirname(require('tls').DEFAULT_CERT_PATH)"找到Node.js证书目录 - 将证书复制到该目录,再运行
npm install -g ssl-root-cas更新信任列表
此方法更安全,适合长期使用代理的开发场景。
额外检查:Facebook开发者平台配置
确保在Facebook开发者平台的应用设置中,正确添加回调地址:
- 进入
产品 > Facebook登录 > 设置,将有效的OAuth重定向URI设置为http://localhost:3000/api/auth/callback/facebook
内容的提问来源于stack exchange,提问作者choboCode
相关产品推荐
相关产品推荐

