Ответы пользователя по тегу Node.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
    Ответ написан
    Комментировать
  • Как отправить данные JSON на клиент?

    @PAVLIK_GYRA
    router.post('/', (req, res) => {
    {query} = req.body
        product.find(async(err, data) => {
            if (err) res.status(400).send(err);
            else {
                if (query) {
                    const newData = await data.filter(item => item.name.toLowerCase().search(query.trim().toLowerCase()) !== -1);
        
                    res.json(newData);
                }
            }
        })
    })
    Ответ написан
    Комментировать
  • Где хранить учётные данные пользователя?

    @PAVLIK_GYRA
    1. localStorage его не отправляют! Используется только на клиентской части.
    2. На сервере отправляешь res.json({ userInfo })
    На клиенте принимаешь ответ от сервера, потом localStorage.setItem('auth', token). Если нужно взять инфо то localStorage.getItem('auth')
    3. Используй 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}
    Ответ написан
    Комментировать
  • Можно ли на NodeJS написать бота для игр (gta5)?

    @PAVLIK_GYRA
    Не знаю как на счёт NodeJs но на пайтоне есть. Вот видео https://www.youtube.com/watch?v=ks4MPfMq8aQ
    Ответ написан
  • Как правильно организовать работу с токенами (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
    Ответ написан
    Комментировать