JSONWebTokenError: JWT неправильно сформирован в индексе. js - PullRequest
2 голосов
/ 05 февраля 2020

Я буду честен, я полностью потерян на этом. Этот проект работал отлично, и я запускаю его с моего последнего работающего GitHub pu sh. Вот что случилось. Я потерял весь свой бэкэнд. Не знаю как, не уверен, что случилось. Поэтому, когда я вытащил из GitHub, у меня не было резервной копии моего секретного ключа JWT. Я получил "Invalid Token Error" (или что-то в этом роде). Я поместил весь этот проект на новый сервер / базу данных, и теперь я получаю следующую ошибку:

JsonWebTokenError: jwt malformed
    at Object.module.exports [as verify] (C:\Users\glove\workspace\CharityApp\backend\node_modules\jsonwebtoken\verify.js:49:17)
    at C:\Users\glove\workspace\CharityApp\backend\src\index.js:15:30
    at Layer.handle [as handle_request] (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:317:13)
    at C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:275:10)
    at cookieParser (C:\Users\glove\workspace\CharityApp\backend\node_modules\cookie-parser\index.js:71:5)
    at Layer.handle [as handle_request] (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:317:13)

И блок кода, на который он ссылается в индексе. js:

const jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');
require('dotenv').config({path: 'variables.env'});
const createServer = require('./createServer');
const db = require('./db');

const server = createServer();

server.express.use(cookieParser());

// decode jwt to get user id on each request
server.express.use((req, res, next) => {
    const {token} = req.cookies;
    if(token) {
        const {userId} = jwt.verify(token, process.env.APP_SECRET);
        // put userid onto request for access
        req.userId = userId;
    }
    next();
});

И код знака, который используется несколько раз, с разрешением GraphQL при входе в систему.

const token = jwt.sign({userId: user.id}, process.env.APP_SECRET);
    // set cookie with token
    ctx.response.cookie("token", token, {
        httpOnly: true,
        maxAge
});

Секрет приложения просто извлекается из файла .env, а maxAge - просто простое const для 1-летнего повара ie.

Это был в основном законченный проект. : / Если кто-то может помочь мне в этом, я был бы очень признателен.

1 Ответ

2 голосов
/ 05 февраля 2020

Когда вы меняете секрет вашего JWT на сервере, вы в конечном итоге лишаете законной силы любые существующие JWT, ранее выпущенные вашим сервером. Если JWT сохраняется как повар ie, браузер продолжит отправлять повар ie с недействительным теперь JWT, пока не истечет или не будет удален повар ie. Вы должны удалить повара ie в вопросе или очистить все свои куки, чтобы решить проблему на стороне клиента.

В этом случае ваш секрет был утерян. Впрочем, не секрет, что секреты меняются со временем. Вам следует убедиться, что вы корректно обрабатываете недопустимые значения (возможно, сбрасывает команду cook ie, когда это происходит), чтобы избежать плохого взаимодействия с пользователем, когда ваш секрет действительно меняется. Как пользователь, я могу справиться с возвращением на сайт и обнаружением, что я вышел из системы, но если все мои запросы не сработали без причины, это приводит к плохому времени. Более того, вы можете вращать свои секреты, отслеживая как предыдущий, так и текущий секрет и проверяя оба, пока не убедитесь, что срок действия старых файлов cookie истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...