Хобрук: Ваш путь к мастерству в программировании

Проверить авторизацию с помощью JWT (nodeJS)

Я хочу защитить свои маршруты, добавив промежуточное ПО checkAuth. Это промежуточное ПО проверяет действительность токена jwt. Я использую экспресс-роутер.

Но я не понимаю, как это сделать.

Мое промежуточное ПО checkAuth:

module.exports = (req, res, next) => {
    let token = req.headers.authorization.split(" ")[1];

    try {
        jwt.verify(token)
        console.log("ok")
    }catch (e) {
        res.status(403)
    }

    next();
}

Спасибо !


  • console.log(e) в улове что вы получаете? 11.11.2020
  • console.log (e) дает мне неожиданный токен в JSON в позиции 17 11.11.2020

Ответы:


1

Предполагая, что вы используете jsonwebtoken, вам не хватает секретной строки.

Согласно документации, как вы должны это делать.

  1. при создании токена:

    var jwt = require('jsonwebtoken');
    var token = jwt.sign({ foo: 'bar' }, 'shhhhh');
    

    Вы также можете передать срок действия:

    jwt.sign({
      data: 'foobar'
    }, 'secret', { expiresIn: 60 * 60 });
    
  2. для проверки:

    Есть несколько способов сделать это. Но для проверки вам потребуется та же секретная строка, которую вы использовали для входа в систему. Также вам необходимо назначить переменную для jwt.verify или вызвать ее с помощью обратного вызова, чтобы получить доступ к декодированным данным, таким как идентификатор пользователя и т. Д.

    // verify a token symmetric - synchronous
    var decoded = jwt.verify(token, 'shhhhh');
    console.log(decoded.foo) // bar
    
    // verify a token symmetric
    jwt.verify(token, 'shhhhh', function(err, decoded) {
      console.log(decoded.foo) // bar
    });
    
    // invalid token - synchronous
    try {
      var decoded = jwt.verify(token, 'wrong-secret');
    } catch(err) {
      // err
    }
    
    // invalid token
    jwt.verify(token, 'wrong-secret', function(err, decoded) {
      // err
      // decoded undefined
    });
    
11.11.2020

2

Создайте новую функцию с именем verifyToken

Предлагаю его пообещать. Таким образом, вы можете использовать его в функции async в сочетании с await

function verifyToken(token){
  return new Promise((res, err) => {
    jwt.verify(token, "secret key", (err) => {
      if (err) rej(err)
      res(true)
    })
  })
}

Ее обещание основано. Теперь вы просто передаете свой токен функции, которая принимает значение true или false:

module.exports = async (req, res, next) => {
    let token = req.headers.authorization.split(" ")[1];
    try {
        await verifyToken(token);
        console.log("ok")
    }catch (e) {
        res.status(403)
    }

    next();
}
11.11.2020
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..