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

