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

使用Express+Passport.js的登录接口返回Bad Request问题求助

问题解决步骤

1. 缺少JSON请求体解析中间件

Express 默认不会自动解析 JSON 格式的请求体,导致 passport-local 无法从 req.body 中读取 username 和 password 参数,直接返回 Bad Request。

解决方法:在初始化 passport 之前,添加 JSON 解析中间件:

const express = require("express");
const app = express();
const LocalStrategy = require("passport-local").Strategy;
const passport = require("passport");

// 添加JSON解析中间件,处理JSON格式的请求体
app.use(express.json());

passport.use(
  new LocalStrategy(function (username, password, done) {
    // 修正认证逻辑:将||改为&&,确保用户名和密码同时匹配
    if (username === "admin" && password === "password") {
      return done(null, { id: 1, username: "admin" });
    } else {
      return done(null, false);
    }
  })
);
app.use(passport.initialize());

app.get("/", (req, res) => {
  res.send("ok");
});
app.post("/login", passport.authenticate("local"), function (req, res) {
  res.json({ message: "Authentication successful" });
});
app.listen(3000, () => {
  console.log(`http://localhost:3000/`);
});  

2. 修正认证逻辑错误

原代码中使用 username === "admin" || password === "password" 作为认证条件,这意味着只要用户名是admin 或者 密码是password就会通过认证,逻辑不合理,应该改为 &&,确保用户名和密码同时匹配正确才能通过认证。

验证请求

修改后重新启动服务,用原请求方式发送POST请求,就能正常返回认证成功的响应了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:14:56