У меня есть путь / register, который возвращает пользователю токен (сгенерированный промежуточным ПО auth). Этот аутентифицированный пользователь сможет просматривать и публиковать сообщения. Однако я не знаю, как хранить этот токен в broswer (или базе данных) и как включить его в заголовок через x-auth-token. В почтальоне я мог бы просто добавить его в заголовок, но я не знаю, как это сделать в форме HTML.
auth.js (промежуточное ПО аутентификации)
const jwt = require('jsonwebtoken');
const config = require('config');
// middleware function, next so it moves on to the next middlware
module.exports = function(req, res, next) {
//get the token from header
const token = req.header('x-auth-token');
//Check if not token
if (!token) {
return res.status(401).json({ msg: 'No token, authorization denied' });
}
//Verify token if exist
try {
const decoded = jwt.verify(token, config.get('jwtSecret'));
req.user = decoded.user;
next();
} catch (err) {
res.status(401).json({ msg: 'Token is not valid' });
}
};
posts.js
// @ route POST api/posts
// @desc Create a post
// @access Private
router.post(
'/',
[
auth,
[
check('title', 'Title is required')
.not()
.isEmpty()
]
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
try {
const user = await User.findById(req.user.id).select('-password');
//user information (name and avatar) comes from the databse, not the request
const newPost = new Post({
title: req.body.title,
body: req.body.body,
name: user.name,
avatar: user.id,
user: req.user.id
});
const post = await newPost.save();
res.json(post);
} catch (err) {
console.error(err.message);
res.status(500).send('Server Error');
}
}
);
post.handlebars (Почтовая форма)
<form class="form" action="/api/posts" method="post" >
<div class="form-group">
<input type="text" placeholder="What is your idea?" name="title" requried>
</div>
<div class="form-group">
<input type="text" placeholder="Let us know more detail. What is the story. How did you come up with it?
Why do you think people would need it etc" name="body">
</div>
<input type="submit" value="Post" class="button green-button" />
</form>
users.js (регистрация)
.
.
.
jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 60 * 60 * 100 },
(err, token) => {
if (err) throw err;
res.json({ token });
// req.flash('You seccessfully registered your account');
// res.redirect('/user/login');
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
}
);