Express - JWT Cookie не сохраняется в браузере - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь сохранить JWT в файлах cookie в браузере, чтобы можно было повторно использовать его для выполнения вызовов API через защищенные маршруты.

Приведенный ниже код является сценарием входа в систему (без обработки ошибок, что облегчает его чтение здесь), который проверяет, совпадают ли адреса электронной почты и пароль пользователей с данными в базе данных.

const auth = (req, res) => {
    const { email, password } = req.body
    User.findOne({ email }, async (err, user) => {

      // If password is correct, create token and send it back
      if (user && bcrypt.compareSync(password, user.password)) {
        const token = await jwt.sign(
          { id: user._id },
          config.auth.secret,
          { expiresIn: config.auth.expireTime }
        )

        res
          .status(200)
          .cookie('access_token', token, {
            secure: false,
            maxAge: 120000,
            httpOnly: false,
          })
          .json({
            message: 'User found',
            user
          })

        return
      }
      // Wrong email or password
      res.status(401).json({ message: 'Wrong Email/Password', data: null })
    })
    return
  }

Iустановите cookie равным httpOnly: false, так как я думал, что это единственный способ для браузера прочитать его.Вот что я вижу в браузере после входа в систему:

no cookies in Application (chrome dev tools)

Нет файлов cookie.

1 Ответ

1 голос
/ 06 июля 2019

Вместо отправки куки из бэкэнда, я отправил его в заголовках ответов при входе в систему, а затем сохранил куки во внешнем интерфейсе с помощью этого пакета: https://www.npmjs.com/package/js-cookie

Теперь я могу повторно использовать куки вбудущие вызовы API после входа в систему (в моем случае для извлечения элементов todo, папок и т. д.).

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