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

Next-Auth authorize方法调用外部API时出现ECONNREFUSED错误

问题根因

Next-Auth的authorize方法是在服务器端执行的,而你在login/page.tsx里的fetch是在浏览器客户端运行的,两者网络环境完全不同:

  • 浏览器里的127.0.0.1:3001指向的是你本地电脑上的Nest.js服务,所以能正常连通;
  • 若Next.js运行在Docker容器中,服务器端代码里的127.0.0.1指代容器自身,而非你的本地电脑,自然会出现连接被拒绝的错误。
解决办法

用Docker Compose部署的情况

Docker Compose中的服务可以直接通过服务名称作为域名访问。假设你的Nest.js服务在docker-compose.yml里的服务名是nest-api,直接修改Next-Auth里的请求地址即可:

// app/api/auth/[...nextauth]/route.ts
const response = await fetch('http://nest-api:3001/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email, password })
});

同时确保docker-compose.yml中两个服务处于同一网络(默认情况下Compose会自动创建默认网络,无需额外配置),示例配置如下:

version: '3.8'
services:
  next-app:
    build: ./your-nextjs-project-folder
    ports:
      - "3000:3000"
  nest-api:
    build: ./your-nestjs-project-folder
    ports:
      - "3001:3001"

本地直接运行服务(未使用Docker)的情况

先检查Nest.js的监听配置,确保它不是仅监听127.0.0.1,改成监听0.0.0.0后,服务器端的请求就能正常访问到:

// Nest.js main.ts
await app.listen(3001, '0.0.0.0');

之后Next-Auth里的请求地址保持http://127.0.0.1:3001/auth/login即可,也可以尝试换成http://localhost:3001。

验证步骤
  1. 重启相关服务(Docker容器或本地的Next.js、Nest.js服务);
  2. 测试Next-Auth登录流程,检查是否还存在连接拒绝错误;
  3. 若问题仍存在,可在Next.js的API路由中添加console.log(process.env.HOSTNAME),确认是否运行在容器内,再尝试ping通Nest.js服务地址排查网络连通性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:49:55