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

本地auth/login登录接口报404及SSL协议错误异常排查

问题根因

两个报错分别对应不同层级的配置问题,和业务逻辑无关:

  • net::ERR_SSL_PROTOCOL_ERROR:前端写死了HTTPS协议请求本地5000端口,但本地启动的后端服务是纯HTTP服务,没有配置SSL证书、也没有开启HTTPS监听,SSL握手阶段直接失败,请求根本没到后端业务层。
  • POST http://localhost:5000/auth/login 404 (Not Found):换成HTTP协议后请求可以到达后端,但后端只注册了/auth/signup路由,没有把login处理函数挂载到POST /auth/login路径上,后端匹配不到路由直接返回404,这也是注册接口正常、只有登录报错的核心原因。从贴出的auth.js代码看,文件只定义了两个处理函数,没有导出、也没有挂载到对应路由的逻辑,属于典型的路由配置遗漏。
修复步骤

1. 修正前端接口协议

本地联调无合法SSL证书时,直接用HTTP协议访问后端,修改Auth.jsx中的接口前缀:

// 原配置
// const URL = 'https://localhost:5000/auth';
// 修改为
const URL = 'http://localhost:5000/auth';

如果后续需要本地HTTPS调试,可使用mkcert生成本地信任证书后再给后端加HTTPS监听,联调阶段直接用HTTP即可。

2. 补全后端路由配置

首先在auth.js文件末尾导出两个处理函数:

// 追加到auth.js文件最后
module.exports = { signup, login };

之后在后端服务入口文件(通常是server.js/app.js/index.js)中补全登录路由的挂载,参考配置如下:

const express = require('express');
const cors = require('cors');
// 注意替换为你的auth.js实际存放路径
const { signup, login } = require('./auth');

const app = express();
app.use(cors());
app.use(express.json());

// 已存在的注册路由
app.post('/auth/signup', signup);
// 补全缺失的登录路由
app.post('/auth/login', login);

app.listen(5000, () => {
  console.log('服务已启动在 http://localhost:5000');
});

3. 修复关联逻辑bug(路由通了之后避免功能异常)

现有代码还有两个逻辑问题,会导致路由配置完成后登录功能依然无法正常运行,需要一并修复:

  • 注册逻辑未同步写入用户到Stream Chat服务:当前signup函数只生成了用户ID、密码哈希和token,没有调用Stream Chat的用户写入接口,后续登录时查询用户会直接返回“用户不存在”错误。需要在signup函数中初始化Stream客户端、写入用户数据:
    const signup = async (req, res) => {
        try {
            const { fullName, username, password, phoneNumber } = req.body
            const userId = crypto.randomBytes(16).toString('hex');
            const serverClient = connect(api_key, api_secret, app_id);
            // 新增:初始化Stream Chat客户端
            const client = StreamChat.getInstance(api_key, api_secret);
            const hashedPassword = await bcrypt.hash(password, 10);
            // 新增:写入用户数据到Stream服务
            await client.upsertUser({
                id: userId,
                name: username,
                fullName,
                hashedPassword,
                phoneNumber
            });
            const token = serverClient.createUserToken(userId);
            res.status(200).json({ token, fullName, username, userId, hashedPassword, phoneNumber})
        } catch (error) {
            console.log(error)
            res.status(500).json({ message: error })
        }
    };
    
  • 前后端响应字段不匹配:前端登录逻辑中解构了hashedPassword字段,但后端login接口的成功响应没有返回该字段,会触发前端运行时错误。生产环境不建议向前端返回密码哈希值,直接修改前端登录时的解构逻辑即可,去掉不需要的hashedPassword字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:30:09