You need to enable JavaScript to run this app. Express后端接入JWT实现鉴权时refresh_token在Postman无授权问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Express后端接入JWT实现鉴权时refresh_token在Postman无授权问题求助

问题排查与修复方案

1. CORS配置缺失Cookie支持

当前CORS配置为默认值,未开启跨域凭证传递,导致Postman/前端请求时不会自动携带refreshtokenCookie,后端无法读取到refresh token就会抛出无授权错误。
修复:修改server.js中的cors配置:

app.use(cors({
  origin: true, // 生产环境可替换为具体的前端域名
  credentials: true // 允许跨域发送Cookie
}))

Postman测试时需要在请求设置中开启「Send cookies」,先调用注册接口写入Cookie后再调用refresh_token接口

2. refreshToken接口缺失JWT校验逻辑

当前refreshToken方法仅读取Cookie返回,没有对refresh token的有效性、过期时间做校验,也没有生成新的access token返回,完整逻辑实现如下:
修改userCtrl.js中的refreshToken方法:

refreshToken: async (req, res) => {
  try {
    const rf_token = req.cookies.refreshtoken
    if(!rf_token) return res.status(401).json({msg: "请先登录"})

    // 校验refresh token有效性
    jwt.verify(rf_token, process.env.REFRESH_TOKEN_SECRET, async (err, result) => {
      if(err) return res.status(401).json({msg: "授权已过期,请重新登录"})
      // 校验用户是否存在
      const user = await Users.findById(result.id).select('-password')
      if(!user) return res.status(401).json({msg: "用户不存在"})
      // 生成新的access token
      const accessToken = createAccessToken({id: user._id})
      res.json({accessToken})
    })
  } catch (err) {
    return res.status(500).json({msg: err.message})
  }
}

3. 路径拼写错误检查

userRouter.js中引入userCtrl的路径写为../controlleers/userCtrl,多写了一个字母l,正确路径为../controllers/userCtrl,如果你的控制层文件夹命名为标准的controllers,这个拼写错误会导致模块加载失败,接口报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:36:03