Пытаюсь сделать авторизацию через passport-jwt. Я проверяю данные пользователя отправленные на сервер, его username и password и генерирую токен.
const username = req.body.username
const password = req.body.password
const user = await User.findOne({
email: username
})
if (!user) {
res.status(404).send(`Пользователь ${username} не существует`)
}
const validPassword = await bcrypt.compareSync(password, user.password)
if (!validPassword) {
res.status(401).send("Пароль не верный")
}
const token = jwt.sign({
userId: user._id,
username: user.email
}, jwtKey, {
expiresIn: '1h'
})
Passport проверяет на наличие в Authorization поля 'Bearer token'
const JWTStrategy = require('passport-jwt').Strategy
const ExstractJWT = require('passport-jwt').ExtractJwt
const JWTkey = require('../config.json').secretJWTKey
const User = require('../models/User')
const options = {
jwtFromRequest: ExstractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey: JWTkey
}
module.exports = passport => {
passport.use(new JWTStrategy(options, async (payload, done) => {
const user = await User.findById(payload.userId).select('email id')
if (!user) {
done(null, false)
}
if (user) {
done(null, user)
}
}))
}
На нужном маршруте у меня стоит защита.
api.get('/create_article', passport.authenticate('jwt', {session: false}), mainController.createArticlePage)
При тестирование через Postman все работает как надо.
Однако, я не знаю как передать этот токен клиенту, чтобы потом он отправлял на сервер для проверки. Как мне его запихнуть в Authorization перед тем, как он откроет нужную мне страницу