2017-01-04 7 views
0

Я использую passport-jwt для проверки подлинности некоторых маршрутов и я создаю свои jwt с с node-jwt-simple/jwt-simple но сталкивается с некоторыми трудностями потому что это выглядит как мой passport-jwt Аутентифицировать промежуточное программные вообще не называемый.Passport-JWT проверка подлинность не очень хорошо работает с узлом-JWT-простыми

Вот мой

паспорт JWT-стратегия

const jwtOpts = { 
 
    jwtFromRequest: ExtractJwt.fromHeader('Authorization'), 
 
    secretOrKey: secret, 
 
}; 
 

 
passport.use(new jwtStrategy(jwtOpts, (payload, done) => { 
 

 
    console.log('payload ', payload.sub); 
 
    User.findById(payload.sub, (err, user) => { 
 
     
 
     if(err) { return done(err); } 
 

 
     if(!user) { console.log('didnt find!'); return done(null, false); } 
 

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

который я затем интегрировать его здесь.

маршруты файл

router.get('/success', 
 
      passport.authenticate('jwt', {session: false}), 
 
      async (ctx, next) => ctx.body = await "success!");

Здесь также, как я сделать мой jwt.

function tokenForUser(user) { 
 
    
 
    const timeStamp = new Date().getTime; 
 
    return jwt.encode({sub: user._id, iat: timeStamp}, secret); 
 
} 
 

 
//- Later in signup process 
 

 
userToSave.save(async(err, user) => { 
 
    
 
    if(err) { return next(err); } 
 

 
    const token = await tokenForUser(user); 
 

 
    next(token); 
 
}); 
 

 

 
//- If this helps, here is how my secret file looks like. 
 

 
const secret = "JKAha23ja1ddHdjjf31"; 
 

 
export default secret;

Проблема приходит, когда я ударил, что маршрут я только получить Unauthorized и в консоли ничего не получает логаут даже не ключ «полезной нагрузки» Я указанный первый.

Я также должен сказать, что у меня есть токен на ctx.request.get('Authorization') (на основе Коа). Я думаю, что это что-то вроде req.header('Authorization') с экспресс во всех направлениях.

Также Точная экспресс на основе проблемы можно найти по вопросам GitHub из node-jwt-simplehere упаковывают любая проблема с моими образцами кода.

спасибо.

ответ

1

После того как я завернул голову вправо, я знал, что это было мое ужасное понимание того, как работает весь процесс аутентификации.

Когда я расшифровал маркер из ctx.get('Authorization') я получил другую _id, чем тот, хранящиеся в БД Поскольку я HARDCODED Authorization заголовка в почтальоне и подумал «Если я ctx.set('Authorization', token); Он заменит один я жёстко на почтальон".

Меньше, я думаю, что этот jwt будет включен в заголовок запросов, когда я делаю http-звонки на переднем конце.

я наивно думал, что jwt s передается непосредственно от сервера к браузеру (что-то нравится, как render работ) и не от сервера к ajax процессу, который позже встраивает его в просьбе, что является правильным способом.

Весь код является удивительным, за исключением того, что я должен просто передать токен ctx.body = token; после того, как создал его, когда я зарегистрировался.

Thank you.