Каковы лучшие методы обработки токена refre sh - PullRequest
0 голосов
/ 22 марта 2020

Я встроил свой Node API с использованием систем Passport и JWT Auth для пользователя. Пользователь может зарегистрироваться и войти в систему. Мой вопрос касается токена refre sh и наилучшего способа справиться с ним. Я сделал то, что в качестве конечной точки с именем /refresh я поместил токен refre sh, и я не уверен, что этот поток верен. Должен ли этот refre sh токен вместо этого быть включен в конечную точку входа в систему или это можно сделать так, как я предлагал?

Я хотел бы понять, как лучше всего это сделать, и правильный поток, который я должен продолжать обрабатывать.

Мой код для потока аутентификации на моем API:

Маршруты

export default (app) => {
  app.use('/', route);
  app.use(passport.initialize());

  app.post('/register', Controller.AuthCtrl.registerUser);
  app.post(
    '/login',
    auth.basic,
    auth.setUserInfo,
    Controller.AuthCtrl.loginUser,
  );
  app.post(
    '/refresh',
    passport.authenticate('jwt'),
    Controller.AuthCtrl.refreshToken,
  );
};

Контроллер:

const AuthController = {
  async registerUser(req, res, next) {
    try {
      const userSchema = {
        ...req.body,
        createdAt: new Date(),
        updatedAt: new Date(),
      };
      const user = await DB.User.register(userSchema, req.body.password);
      // eslint-disable-next-line no-underscore-dangle
      const token = auth.getToken({ _id: req.user._id });
      if (!user) {
        Logger.error('User was not created. Something went wrong');
        return res
          .status(500)
          .send('User was not created. Something went wrong');
      }
      if (!token) {
        Logger.error('Token was not created. Something went wrong');
        return res
          .status(500)
          .send('Token was not created. Something went wrong');
      }
      Logger.info('User and token created successfully.');
      return res.status(200).send({ user, token });
    } catch (err) {
      Logger.error(err);
      return next(err);
    }
  },
  async loginUser(req, res, next) {
    try {
      // eslint-disable-next-line no-underscore-dangle
      const token = auth.getToken({ _id: req.user._id });
      Logger.info(token);
      if (!token) {
        Logger.error('Token was not created. Something went wrong');
        return res
          .status(401)
          .send('Token was not created. Something went wrong');
      }
      return res.status(200).send({ user: req.user, accessToken: token });
    } catch (err) {
      Logger.error(err);
      return next(err);
    }
  },
  async refreshToken(req, res, next) {
    try {
      // eslint-disable-next-line no-underscore-dangle
      const token = auth.getToken({ _id: req.user._id });
      Logger.info(token);
      if (!token) {
        Logger.error('Token was not created. Something went wrong');
        return res
          .status(401)
          .send('Token was not created. Something went wrong');
      }
      return res.status(200).send({ user: req.user, accessToken: token });
    } catch (err) {
      Logger.error(err);
      return next(err);
    }
  },
};

Пожалуйста, дайте мне знать в комментариях, если вам нужно добавить дополнительную информацию.

Тем не менее, я хотел бы узнать, какую практику я должен придерживаться, также основываясь на производительности и масштабируемости или что мне следует знать, чтобы улучшить свои навыки разработки.

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