Я следовал руководству, чтобы добавить логин и регистрацию в свое приложение Node.js с использованием токена JWT, и мне трудно войти в систему и перенаправить на мою страницу входа в систему. Регистрация пользователя работает отлично, но часть входа в систему я не могу понять.
Это учебник, которому я следовал:
https://medium.freecodecamp.org/learn-how-to-handle-authentication-with-node-using-passport-js-4a56ed18e81e
Мой код для входа выглядит так:
router.post('/login', auth.optional, (req, res, next) => {
console.log(req.body);
var user = {
email: req.body.email,
password: req.body.password
}
if (!user.email) {
return res.status(422).json({
errors: {
email: 'is required',
},
});
}
if (!user.password) {
return res.status(422).json({
errors: {
password: 'is required',
},
});
}
return passport.authenticate('local', { session: false }, (err, passportUser, info) => {
if (err) {
return next(err);
}
if (passportUser) {
const user = passportUser;
user.token = passportUser.generateJWT();
console.log("TOKEN: " + user.token);
res.setHeader('Authorization', 'Token ' + user.token);
return res.json({ user: user.toAuthJSON() });
}
return res.status(400).json({
errors: {
message: info,
},
});
})(req, res, next);
});
Мой «/ admin» маршрут «залогинен» выглядит так:
router.get("/admin", auth.required, function(req, res) {
res.render('admin', {
user : req.user // get the user out of session and pass to template
});
});
Я не уверен, как я могу перенаправить на свой маршрут '/ admin', также передавая токен, потому что в настоящее время я вижу следующую ошибку после входа в систему. Имеет смысл, так как я не передаю токен в '/ admin 'маршрут ... но как мне это сделать? :)
UnauthorizedError: No authorization token was found at middleware
Заранее спасибо за помощь!
EDIT:
Все еще не могу понять это и не совсем понимаю, как этот поток должен работать ... где заголовки должны быть установлены на токен и как мне перенаправить на мою страницу администратора после входа в систему успешный.
Вот мой код промежуточного программного обеспечения, если это поможет:
const getTokenFromHeaders = (req) => {
console.log("REQ: " + JSON.stringify(req.headers));
const { headers: { authorization } } = req;
if(authorization && authorization.split(' ')[0] === 'Token') {
return authorization.split(' ')[1];
}
return null;
};
const auth = {
required: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders,
}),
optional: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders,
credentialsRequired: false,
}),
};