我在运行消息传递 API 时在 Postman 中收到错误,“未授权,令牌失败”
这是我的 message.js 文件
const express = require("express");
const { protect } = require("../middleware/authMiddleware");
const {sendMessage} = require("../controllers/messageControllers");
const router = express.Router();
router.route("/").post(protect, sendMessage); //compilation would start from here
module.exports = router;
我已经制作了 JWT 密钥
这是我生成的令牌文件
const jwt = require('jsonwebtoken');
const generateToken = (id) => {
return jwt.sign({id}, process.env.JWT_SECRET, {
expiresIn: "30d",
});
};
module.exports = generateToken;
这是我的 authMiddleware.js 文件
const jwt = require('jsonwebtoken');
const User = require('../models/userModel');
const asyncHandler = require('express-async-handler');
const protect = asyncHandler(async (req, res, next) => {
let token;
if(req.headers.authorization && req.headers.authorization.startsWith("Bearer")){
try{
token = req.headers.authorization.split(" ")[1];
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = await User.findById(decoded.id).select("-password");
next();
} catch (error) {
res.status(401);
throw new Error("Not authorized, token failed");
}
}
if(!token){
res.status(401);
throw new Error("No token, no authorization");
}
});
module.exports = {protect};
该令牌上周一直有效,现在显示无效。该令牌应该可以使用,或者我如何为我的项目创建新令牌?
如果上周工作正常,但现在无法识别,则 JWT_SECRET 环境变量可能已更改,请确保该值与上周相同,或创建一个新变量(检查 JWT_SECRET 变量不为 null 或未定义) ).
关于这部分:
req.user = await User.findById(decoded.id).select("-password");
另请检查您的用户数据库,因为该用户可能不再存在。