React, nodejs, jwt — как сделать аутентификацию и авторизацию с refresh token?

Коллеги доброго времени суток
Вопрос конечно не новый, но все таки, подскажите кто делал, реализацию кейса, первый раз столкнулся с rest глобально.
Реализация авторизации аутентификации и замены токена по истечении времени!
Заранее благодарю
  • Вопрос задан
  • 1023 просмотра
Пригласить эксперта
Ответы на вопрос 2
Делаешь запрос, в middleware проверяешь токен. Если срок истек выбрасываешь ошибку.
На клиенте при этой ошибке, делаешь отправку рефреш токен на отдельный роут.
На нем в middleware делаешь проверку рефреш токена. Если рефреш действитейный, отправляешь
клиенту новую пару аксесс и рефреш токенов. Если нет, то ошибку доступа.
Ответ написан
@yaroslav1996
Не знаю если вам поможет, примерно вот так можете попробывать. И это работает, проверять можете через middlewares или сделать, endpoint. По которому вы можете стучаться, по истечению времени. Пример базовый!

const jwt = require('jsonwebtoken');

const secret = process.env.TOKEN_SECRET || 'some other secret as default';
const tokenLife = +process.env.TOKEN_LIFE || 3600;

module.exports = (req, res) => {
  const { refreshToken } = req.body;

  jwt.verify(refreshToken, secret, (err, decoded) => {
    if (err) {
      return res.status(401).send('Unauthorised');
    }
    if (decoded) {
      const payload = {
        id: decoded.id,
        email: decoded.email,
      };
      jwt.sign(payload, secret, { expiresIn: tokenLife }, (Error, token) => {
        if (Error) {
          return res.status(401).send('Unauthorised');
        }
        res.send({
          success: true,
          accessToken: `Bearer ${token}`,
        });
      });
    }
  });
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы