我正在MERN堆栈上学习Udemy课程,并且在使用Web令牌和授权时陷入困境。
我创建了一个auth.js文件,如下所示:
const jwt = require("jsonwebtoken");
function auth(req, res, next) {
try {
const token = req.cookie.token;
if(!token){
res.status(401).json({errorMessage: "Unauthorized 1"});
}
const validatedUser = jwt.verify(token, process.env.JWT_SECRET);
req.user = validatedUser.id;
next();
}
catch(err) {
res.status(401).json({errorMessage: "Unauthorized 2"});
}
}
module.exports = auth;
在我的snippetRouter.js文件中,我引入了auth并尝试在我的get路由器中使用它。如下:
const router = require("express").Router();
const { get } = require("mongoose");
const Snippet = require("../models/snippetModel");
const auth = require("../middleware/auth");
router.get("/", auth, async(req, res) => {
try{
console.log(req.user); // <-- stuck here
const snippets = await Snippet.find();
res.json(snippets);
}
catch(err){
res.status(500).send();
}
});
使用失眠,我正在呼叫.get路由器。我应该能够在终端控制台中看到用户ID,但是Insomnia却给了我“未经授权2”错误。
这告诉我,auth.js上auth函数的try块内发生了一些事情,但是我不确定如何弄清楚。我正在按照指示完全按照本教程进行操作。
我在做什么错,该如何解决?
这行代码:
const token = req.cookie.token;
应该:
const token = req.cookies.token;
因为req.cookie
不存在,req.cookie.token
所以您对它的引用被抛出,因此您进入了catch
障碍。
关于未来的两点建议。首先,当服务器上出现错误时,请始终记录该错误是什么。
如果您有这个:
catch(err){
console.log(err);
res.status(500).send();
}
错误的原因可能很明显,因为那err
会告诉您问题是什么。
其次,当您遇到这样的问题使您感到困惑时,请添加其他日志记录以查看所有中间值是什么(或设置断点并在调试器中逐步解决)。您可能很快就会发现自己从来没有过去const token = req.cookie.token;
,然后可以登录req.cookie
查看原因。那也可以告诉您问题出在哪里。
我想当然不用说,这里需要一些先前的步骤才能将令牌设置到适当的Insomnia cookie jar中,以便令牌可以出现在cookie中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句