使用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
相关产品推荐
相关产品推荐

