У меня есть API в Node.js и Express, и я использую jsonwebtoken для создания знака, когда пользователь входит в систему.
Я отправляю токен в заголовке клиенту.
Когда пользователь хочет получить профиль. Сначала я проверяю отметку с помощью паспортов, и если знак правильный, я отправляю ему профиль пользователя.
Я пишу этот код для промежуточного программного обеспечения паспорта:
паспорт. js файл:
let passport = require("passport");
let {decodedToken} = require('./help');
let {Users} = require('./database/database');
let JwtStrategy = require('passport-jwt').Strategy;
let ExtractJwt = require('passport-jwt').ExtractJwt;
let opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'ashkanhsh1376$CS';
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
console.log(jwt_payload);//didn't work
new Users({}).where({id: jwt_payload.id}).fetchAll({}).then(user=>{
if (user[0]) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
Я добавляю файл passport.js
в файл Express маршрутизатора следующим образом: require('../possport')';
.
и устанавливаю промежуточное ПО на express такой роутер:
routerApi. js:
let express=require('express');
let cors=require('cors');
let passport=require('passport');
let loginRouter=express.Router();
require('../possport');
loginRouter.use(express.json());
loginRouter.use(cors());
loginRouter.use("/api/logout", passport.authenticate('jwt', { session: false }));
loginRouter.post('/api/logout',async(req,res)=>{
try{
res.json(res.user);
}catch{
}
});
Для проверки кода выше я использую почтальон, как это изображение:
и я получаю этот результат в почтальоне:
Я не знаю, где я ошибся, если бы вы могли помочь