У меня проблема, когда я пытаюсь использовать метод get в "localhost:3300/api/user/all" (или любой другой), он показывает мне ошибку в Postman ""error": "Неверный токен "". Я помещаю свой токен в заголовок авторизации, используя формат «Bearer». Я понятия не имею, что может быть причиной этого.
Мой user.js
const express = require("express");
const router = express.Router();
const User = require("../models/user");
const {
verifyToken,
verifyTokenAndAdmin,
} = require("../routes/verifyToken");
router.get("/:id", verifyToken, async (req, res) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).json({ error: "User not found" });
}
res.json(user);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.get("/", verifyTokenAndAdmin, async (req, res) => {
try {
const users = await User.find({});
res.json(users);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.put("/:id", verifyToken, async (req, res) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).json({ error: "User not found" });
}
user.firstName = req.body.firstName;
user.lastName = req.body.lastName;
user.address = req.body.address;
user.phone = req.body.phone;
user.dateOfBirth = req.body.dateOfBirth;
const updatedUser = await user.save();
res.json(updatedUser);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.delete("/:id", verifyTokenAndAdmin, async (req, res) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).json({ error: "User not found" });
}
await user.remove();
res.json({ message: "User deleted successfully" });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;const jwt = require("jsonwebtoken");
const verifyToken = (req, res, next) => {
const authtoken = req.header("Authorization");
const token = authtoken.split(" ")[1];
if (!token) {
return res.status(401).json({ error: "No token, authorization denied" });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (err) {
console.info(token)
res.status(401).json({ error: "Invalid token" });
}
};
const verifyTokenAndAdmin = (req, res, next) => {
verifyToken(req, res, () => {
// Check if the user is an admin
if (!req.user.isAdmin) {
return res.status(403).json({ error: "Admin access required" });
}
next();
});
};
const verifyTokenAndAuth = (req, res, next) => {
verifyToken(req, res, () => {
next();
});
};
module.exports = {
verifyToken,
verifyTokenAndAdmin,
verifyTokenAndAuth,
};просто измените заголовок req.header("Authorization"); на req.header("bearer");



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы проверяли журналы сервера?
Похоже, вы должны изменить verifyToken в verifyToken.js, чтобы регистрировать ошибку в блоке catch вместо токена. Это должно приблизить вас к отладке.
Скорее всего ошибка вылетает в этой строке:
const decoded = jwt.verify(token, process.env.JWT_SECRET);
Либо проверка не проходит, либо JWT_SECRET недействителен.
Измените строки ниже, чтобы увидеть ошибку:
} catch (err) {
console.info(err) // <- err instead of token
res.status(401).json({ error: "Invalid token" });
}
Почему вы не регистрируете фактическое сообщение об ошибке после
catch (err)вместо того, чтобы просто возвращать общий «Неверный токен»?