Я хочу получить доступ к защищенным маршрутам с помощью моего внешнего интерфейса, но я не могу это сделать, я могу сделать это только с почтальоном.
Я пытаюсь сохранить JWT в локальном хранилище, сейчас я пытаюсь установить его какзаголовок, но я боюсь, я все еще делаю что-то не так и не могу понять, что.
Это мой логин
// Login
router.post("/login", (req, res, next) => {
const username = req.body.username;
const password = req.body.password;
User.getUserByUsername(username, (err, user) => {
if (err) throw err;
if (!user) {
return res.json({
success: false,
msg: "User not found"
});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign({
data: user
},
config.secret, {
expiresIn: 604800 // 1 week
}
);
res.setHeader('Authorization', "Bearer " + token);
res.redirect('profile');
} else {
return res.json({
success: false,
msg: "Wrong password"
});
}
});
});
});
// Profile
router.get(
"/profile",
passport.authenticate("jwt", {
session: false
}),
(req, res, next) => {
res.json({
user: req.user
});
}
);
module.exports = router;
Passport.js
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');
module.exports = function(passport){
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
User.getUserById(jwt_payload.data._id, (err, user) => {
if(err){
return done(err, false);
}
if(user){
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
Профиль.handlebars
<h1>Welcome on profile</h1>
Я действительно не знаю, как это сделать, я в основном на уроках, но я просто не могу найти что-то подходящее для этого.И все мои попытки ложны.