“未授权,令牌失败”

问题描述 投票:0回答:1

我在运行消息传递 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};

该令牌上周一直有效,现在显示无效。该令牌应该可以使用,或者我如何为我的项目创建新令牌?

javascript reactjs database chat mern
1个回答
0
投票

如果上周工作正常,但现在无法识别,则 JWT_SECRET 环境变量可能已更改,请确保该值与上周相同,或创建一个新变量(检查 JWT_SECRET 变量不为 null 或未定义) ).

关于这部分:

req.user = await User.findById(decoded.id).select("-password");

另请检查您的用户数据库,因为该用户可能不再存在。

© www.soinside.com 2019 - 2024. All rights reserved.