Неверный токен JWT

У меня проблема, когда я пытаюсь использовать метод 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;
My verifyToken.js

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,
};

Почему вы не регистрируете фактическое сообщение об ошибке после catch (err) вместо того, чтобы просто возвращать общий «Неверный токен»?

jps 01.08.2023 20:24

просто измените заголовок req.header("Authorization"); на req.header("bearer");

rick 01.08.2023 20:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы проверяли журналы сервера?

Похоже, вы должны изменить 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" });
  }

Другие вопросы по теме