Промежуточное ПО для паспорта jwt не работает

Я использую узел 8.11.1, экспресс 4.16.3, passport@0.4.0, passport-jwt@4.0.0, jsonwebtoken@8.3.0 и pg 7.4.2 / pg-обещание 8.4.4. (мой БД не Монго, это PostgreSQL)

Я создаю свой JWT после успешного входа в систему, так

const token = jwt.sign({userid: resolved.id, usermail : resolved.mail}, config.secretOrKey, {expiresIn:604800});
return res.json({success:true, token:'JWT '+token, msg:'logged', userid: resolved.id, usermail : resolved.mail});

тогда в моем account маршрут, которым я хочу управлять своим доступом, у меня есть

const express = require('express');
const router = express.Router();
const cmsuser = require('../../db/cmsuser.js');
const {body, validationResult } = require('express-validator/check');
const passport = require('passport');
require('../../db/passport')(passport);

router.get('/', passport.authenticate('jwt', { session: false }), (req, res, next)=>{
  res.render('cms/account',{
    'title':'account'
  });
});

module.exports = router;

и в моем passport.js я имею

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const user = require('./index.js');
const config = require('./config.js');

module.exports = (passport)=> {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromHeader('Authorization');
  opts.secretOrKey = config.secretOrKey;
  console.log('log');
  passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    console.log('jwt_payload ', jwt_payload);
      user.query('select id,mail from publisher WHERE id = $1', [jwt_payload.sub])
      .then(res => {
        console.log('passport res');
        return done(null, res) ;
      })
      .catch(error => {
        console.log('passport error');
        return done(error, false) ;
      });// catch
  }));
};

мой app.js имеет const passport = require('passport');а также

app.use(passport.initialize());
app.use(passport.session());

прямо перед установкой маршрутов

console.log('log'); в passport.js Появляется только один раз после запуска узла и никогда при последующем посещении страницы. console.log('jwt_payload ', jwt_payload); из passport.js никогда не появляется.

Я запутался, не должно ли промежуточное программное обеспечение работать каждый раз, когда я посещаю localhost:3000/cms/account? Так что каждый раз, когда я должен увидеть по крайней мере log в моей консоли?

Все мои маршруты также имеют next в них

Что мне здесь не хватает, как я могу заставить эту работу работать? Похоже, что промежуточное программное обеспечение никогда не запускается вообще, когда я посещаю маршрут учетной записи.

** если это имеет какое-то значение, я следую уроку Брэда здесь, но я воплощаю его урок в моем существующем проекте базового узла, поэтому структура маршрутов отличается.

Спасибо

0 ответов

Другие вопросы по тегам