【发布时间】:2021-12-28 14:54:09
【问题描述】:
我在 youtube 上使用 lama dev 尝试此代码。我在邮递员上收到这个错误 我复制访问令牌并在我使用它时显示(令牌无效),但与用户的令牌相同,就像视频一样。
当我查看终端时它显示(无法读取未定义的属性 id)或无法读取未定义的属性 isAdmin)
我不知道如何解决它,如果问题是代码或者我不知道如何使用邮递员。 我是代码新手
这是名为 verifytoken.js 的路由文件
const jwt = require("jsonwebtoken")
const verifyToken = (req,res, next) => {
const authHeader = req.headers.token
if(authHeader) {
const token = authHeader.split(" ")[1];
jwt.verify(token, process.env.JWT_SEC, (err, user)=>{
if(err) res.status(403).json("token is not valid");
req.user = user;
next();
})
} else {
return res.status(401).json(" you are not authenticated");
}
};
const verifyTokenAndAuthorization = (req,res,next) => {
verifyToken(req,res,()=> {
if(req.user.id === req.params.id || req.user.isAdmin ) {
next();
} else {
res.status(403).json("you are not allowed to do that");
}
});
};
const verifyTokenAndAdmin = (req,res,next) => {
verifyToken(req,res,()=> {
if( req.user.isAdmin) {
next();
} else {
res.status(403).json("your are not the admin ");
}
});
};
module.exports = {verifyToken, verifyTokenAndAuthorization, verifyTokenAndAdmin};
- 这是名为 user.js* 的路由文件
const User = require("../models/User")
const { verifyToken, verifyTokenAndAuthorization, verifyTokenAndAdmin} = require("./verifyToken");
const router = require("express").Router();
// UPDATE
router.put("/:id", verifyTokenAndAuthorization, async (req, res)=>{
if(req.body.password) {
req.body.password = CryptoJS.AES.encrypt(
req.body.password,
process.env.PASS_SEC
).toString();
}
try {
const updatedUser = await User.findByIdAndUpdate(req.params.id, {
$set: req.body
}, {new: true}
);
res.status(200).json(updatedUser);
}catch (err) {
res.status(500).json(err);
}
});
//DELETE
router.delete("/:id", verifyTokenAndAuthorization, async (req,res)=>{
try {
await User.findByIdAndDelete(req.params.id)
res.status(200).json("user has been deleted");
}catch(err){
res.status(500).json(err)
}
})
//GET USER
router.get("/find/:id", verifyTokenAndAdmin, async (req,res)=>{
try {
const user = await User.findById(req.params.id);
const { password, ...others } = user._doc;
res.status(200).json(others);
}catch(err){
res.status(500).json(err)
}
})
module.exports = router;
【问题讨论】:
-
你能分享一下你对邮递员的要求吗?
-
你能找到解决办法吗?
-
我还没有尝试,但我会的,我想我在语法上有错误