Задать вопрос
Ответы пользователя по тегу Express.js
  • Что нужно передать в token?

    @PAVLIK_GYRA
    К примеру. Страница авторизации например /login/ должна вернуть токен
    const token = jwt.sign(
              { userId: id },
              config.get('jwtSecret'),
              { expiresIn: '24h' }
            )
            res.json({ token })

    Вы получаете его на клиенте и записываете в localStorage. Когда он нужен берёте его от туда и вставляете в опции fetch или axios {headers:{Authorization: token}} - для frontend
    Для postman нужен токен а взять его можно если у вас реализована авторизация с jwt
    Ответ написан
    Комментировать
  • Как правильно делать JWT авторизация NodeJs?

    @PAVLIK_GYRA
    const token = jwt.sign({
                userId: user._id,
                username: user.email
            }, jwtKey, {
                expiresIn: '1h'
            })
    res.json({ token })


    на фронте получаешь данные, берёшь засовываешь localStorage.setItem('auth', token). При запросе нужной странице отправляешь в опциях к fetch или axios в header {Authorization: token}
    Ответ написан
    Комментировать
  • Как правильно организовать работу с токенами (jwt) в react?

    @PAVLIK_GYRA
    В authMiddleware подключена библиотека jwt но так и не использована! Вот пример моего мидла
    const jwt = require('jsonwebtoken')
    const c = require('config')
    
    // проверка токена
    
    const auth = async (req, res, next) => {
      try {
        const token = req.header('x-auth-token') //тут может быть любой хэдр у меня кастомный
        if (!token) return res.status(401).json({ msg: 'No auth 1' })
        const verified = jwt.verify(token, c.get('jwtSecret'))
        if (!verified) return res.status(401).json({ msg: 'No auth 2' })
        req.user = verified.id
        next()
      } catch (e) {
        res.status(500).json({ error: e.message })
      }
    }
    
    module.exports = auth


    потом на фронте например на странице авторизации и отправке данных и проверке на сервере вернуть токен и юзерИнфо на фронт(желательно ещё записать в localStorage типа token:dghehgfdgnhrhwrr) закинуть в useState и до нужного элемента прокинуть через useContext. А потом как хочешь... на нужной странице можешь опять проверить токен и если он валидный выполнять ту или иную логику.
    1) только на сервере тк так есть серверный ключ для расшифровки.
    2) например я проверяю токен при первом обращении к сайту так
    router.post('/login', async (req, res) => {
      // --> проверка токена на валидность
      try {
        const token = req.header('x-auth-token')
        if (!token) return res.json(false)
        const verified = jwt.verify(token, config.get('jwtSecret'))
        if (!verified) return res.json(false)
        const user = await User.findById(verified.id)
        if (!user) return res.json(false)
        return res.json(true)
      } catch (e) {
        res.status(500).json({ error: e.message })
      }
    })


    у меня любой запрос на сервер идёт с хэдером и на сервере его проверяет милдвэр auth
    Ответ написан
    Комментировать