Преобразование полезной нагрузки JWT в экземпляр модели Mon goose - PullRequest
1 голос
/ 06 февраля 2020

Я настроил локальную стратегию для включения user instance пользователя в полезную нагрузку JWT, конечно в формате JSON, следующим образом:

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  async function (email, password, done) {
    try {
      const user = await User.findOne({ email })
      const isCorrectPassword = await bcrypt.compare(password, user.password)
      if (!user || !isCorrectPassword) {
        return done(null, false, { message: "Email o contraseña incorrecto/s" })
      }

      return done(null, user.toJSON(), { message: "Ingreso existoso"})
    } catch (e) {
      return done(e)
    }
  }
))

Теперь, когда один из моих маршрутов вызывает passport.authenticate(), моя стратегия JWT настроена на извлечение идентификатора пользователя из полезной нагрузки и последующий запрос к базе данных для возврата экземпляра модели mon goose из этого идентификатора для сохранения в req.user. Например:

passport.use(new JWTStrategy({
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey: process.env.JWT_SECRET
},
  async function(jwtPayload, done) {
    try {
      const user = await User.findById(jwtPayload._id)
      return done(null, user)
    } catch (e) {
      return done(e)
    }
  }
))

Я чувствую, что запрашиваю БД для получения той же информации, которая закодирована в полезной нагрузке, супер неэффективно, поэтому я бы хотел обойтись без const user = await User.findById(jwtPayload._id), и вместо этого вернуть полезную нагрузку (return done(null, jwtPayload)), но поскольку jwtPayload на самом деле JSON, а не объект mon goose, я боюсь, что он не будет работать из коробки.

Как мог Я совершил sh это? Есть ли функция mon goose, которая переводит JSON в экземпляр модели?

...