2017-01-09 9 views
0

Я не получаю объект пользователя к следующему промежуточному программному обеспечению после успешного прохождения промежуточного программного обеспечения passport.authenticate('local', {session: false}).Koa v2, получая объект пользователя после входа в паспорт-loca

Вот как выглядит мой код.

В паспортном локальной стратегии

passport.use(new localStrategy((username, password, done) => { 
 

 
    User.findOne({username}, (err, user) => { 
 
     
 
     if(err) { return done(err) } 
 

 
     if(!user) { return done(err) } 
 

 
     user.comparePasswords(password, async(err, isMatch) => { 
 

 
      if(!isMatch) { return done(null, false) } 
 

 
      done(null, user); 
 
     }); 
 
    }); 
 
}));

который я думаю предполагают, чтобы вернуть объект пользователя, если Логин успешно сделано.

Тогда в моих маршрутов У меня есть

const requireAuth = passport.authenticate('local', {session: false}); 
 

 
router.post('/login', requireAuth, signIn);

Как когда я ударил /signin паспорт промежуточного слоя называется, а затем, когда это сделано signIn промежуточное программное обеспечение называется то, что я ожидал ,с моим зарегистрированным пользователем объектом.

Но когда я проверить в моем промежуточного слоя для входа в аккаунт ничего не передается (в запросе или ответа) объекта.

Вот мой зарегистрировалось промежуточного

const signIn = async (ctx, next) => { 
 
    const res = ctx.response; 
 
    const req = ctx.request; 
 

 
    console.log('response', res); //- Nothing from passport 
 
    console.log('request', req); //- Nothing from passport 
 
    await next(); 
 
};

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

спасибо.

+0

Я не думаю, что 'const res = wait ctx.response;' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Я не думаю, что это так, не так ли? –

+0

@ OvidiuDolha нет, это не так, я пытался обычным способом (без 'awaits'), но это тоже не сработало. Lemme исправить код. – ArchNoob

ответ

0

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

Вот мой passport.js файл Единственный файл, который changned.

passport.use(new localStrategy(
 
    {passReqToCallback: true}, 
 
    async(req, username, password, done) => { 
 

 
    User.findOne({username}, (err, user) => { 
 
     
 
     if(err) { return done(err) } 
 

 
     if(!user) { return done(err) } 
 

 
     user.comparePasswords(password, async(err, isMatch) => { 
 

 
      if(!isMatch) { return done(null, false) } 
 

 
      req.body = user; 
 
      await done(null, user); 
 
     }); 
 
    }); 
 
}));

Да я перекрывая мой req.body с пользователем, полученной из БД.

Я честно не знаю, почему я все еще держу done(null, user), я мог бы просто сказать done(null, true), но это только я.

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

Спасибо.