Узел с маршрутом выхода из системы JWT, что мне нужно передать в теле маршрута выхода из системы? - PullRequest
1 голос
/ 11 апреля 2020

Я использую этот пример: https://github.com/jkasun/stack-abuse-express-jwt с почтальоном, и все маршруты работают нормально, за исключением / logout

Я передаю токен на предъявителя с токеном, как Я сделал с книгами. js Маршруты Get и Post / books, но я получаю ошибку:

"ReferenceError: t не определено"

Я думаю, мне нужно пройти что-то на теле, но я не могу понять, что

Маршрут:

app.post('/logout', (req, res) => {
    const { token } = req.body;
    refreshTokens = refreshTokens.filter(token => t !== token);

    res.send("Logout successful");
});

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

В этом есть несколько проблем. Давайте решать это. Возможно, пост будет длинным со всеми ошибками, подсвеченными одна за другой, чтобы помочь вам понять это. Сначала вы должны понять два различия AccessTokens и refreshTokens, позвольте мне обсудить это в конце. Первые несколько исправлений.

в строке вашего файла github #22 вы определяете следующее

const refreshTokens = [];

Но это должно быть var или let not const, так как вы добавите в него больше значений. Константа используется, чтобы не менять. Еще одна вещь, которую вы забыли accessTokens, чтобы добавить сюда. Теперь измените его следующим образом:

var refreshTokens = [];
var accessTokens = [];

В строке 35 вы создаете токен доступа, поэтому добавьте его в этот массив, добавив после 38 после строки refereshTokens

accessTokens.push(accessToken)

Так что все хорошо, что вы сохранили оба токена. Теперь, когда вы хотите выйти из системы. В соответствии с вашей кодировкой, вы хотите удалить refre sh токен, так как @pzaenger предлагает выполнить следующее.

refreshTokens = refreshTokens.filter((t) => t !== token)

Это удалит ваш refreshToken, но ваш accessToken все еще действителен, функциональности было немного, поэтому не уверен. Также вам нужно добавить свой токен в Заголовки как Авторизация, а не в Тело.

1 голос
/ 12 апреля 2020

Вы назвали элемент обратного вызова filter неправильным. Это должно быть t:

refreshTokens = refreshTokens.filter(t => t !== token);

Кроме того, чтобы присвоить новое значение refreshTokens, оно не должно быть объявлено как const. Вы можете использовать let.

...