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

如何在Postman中通过Passport本地认证并测试接口?

解决Postman测试Passport本地认证接口的问题

一、纠正登录接口路径

你尝试调用的/auth/local路由不存在,从你的代码来看,正确的本地认证登录接口是POST /login,这是你在Route.js中定义的路由。

二、Postman中完成认证并测试接口

你的Passport配置使用Session认证,登录后服务器会返回Session Cookie,Postman只需保存该Cookie即可在后续请求中保持认证状态:

  1. 在Postman中新建POST请求,URL填写你的服务器地址+/login(比如http://localhost:3000/login)
  2. 切换到Body标签,选择x-www-form-urlencoded(或form-data,和你前端提交的格式一致)
  3. 添加两个键值对:
    • username:你的测试用户名
    • password:对应用户密码
  4. 点击Send发送请求。如果登录成功,服务器会重定向到/,此时需确保Postman的Cookie自动发送功能开启(在请求的Cookies标签中,确认"Automatically send cookies"已勾选),Postman会自动保存返回的Session Cookie。

步骤2:测试需要认证的接口

直接发送需要认证的接口请求(比如受ensureAuthenticated中间件保护的路由),Postman会自动带上之前保存的Session Cookie,此时req.isAuthenticated()会返回true,不会被重定向到登录页。

三、优化:让登录接口更适合API测试(可选)

当前登录路由在认证成功/失败时会重定向页面,对于Postman测试不够友好,你可以修改登录路由,根据请求类型返回JSON数据而非重定向:

修改Route.js中的POST /login路由为:

router.post('/login', async (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
    if (err) return next(err);
    // 认证失败
    if (!user) {
      // 若请求期望JSON返回,返回错误JSON
      if (req.accepts('json')) {
        return res.status(401).json({ success: false, message: info.message });
      }
      // 网页请求仍重定向到登录页
      return res.redirect('/login');
    }
    // 完成登录
    req.login(user, (err) => {
      if (err) return next(err);
      // 若请求期望JSON返回,返回成功信息
      if (req.accepts('json')) {
        return res.json({ 
          success: true, 
          message: '登录成功',
          user: { id: user.id, username: user.username, name: user.name }
        });
      }
      // 网页请求重定向到首页
      res.redirect('/');
    });
  })(req, res, next);
});

修改后,在Postman发送登录请求时,在Headers标签添加Accept: application/json,服务器会直接返回JSON结果,无需处理重定向,更适合API测试场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:07:02