Промежуточное ПО для паспорта 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
в них
Что мне здесь не хватает, как я могу заставить эту работу работать? Похоже, что промежуточное программное обеспечение никогда не запускается вообще, когда я посещаю маршрут учетной записи.
** если это имеет какое-то значение, я следую уроку Брэда здесь, но я воплощаю его урок в моем существующем проекте базового узла, поэтому структура маршрутов отличается.
Спасибо