Я изо всех сил пытался сделать это около 6 дней ... Все отлично работает, например, авторизация, но у меня возникла одна проблема - аутентификация.
В моей модели пользователя (для создания схемы базы данных ) У меня есть способ сгенерировать токен для зарегистрированных пользователей или зарегистрированных.
userSchema.methods.generateAuthToken = function(){
const token = jwt.sign({ _id: this._id }, config.get('jwtPrivateKey'));
return token;
}
Поэтому, когда пользователь публикует в / login, сервер отвечает токеном:
router.post('/', async (req, res) =>{
// Here i'm validating data and then if everything is right the code under will run.
console.log('logged in as: ' + user.username);
// Here i'm using the function to generateAuthToken().
const token = user.generateAuthToken();
console.log("Token from server: " + token);
// now here is my main problem i would like to use cookies to store it for an hour or so.
// then client can send it back to server for protected route.
res.status(200).send(token);
});
Я сделал функцию промежуточного программного обеспечения для аутентификации (чтобы проверить токен, если вы проходите через защищенный маршрут)
module.exports = function (req, res, next){
// instead of using headers i would like to check for the cookie value if it's the token,
// pass the user in, else Access denied.
// I have no idea how to use cookie parser with middleware functions.
const token = req.header('x-auth-token');
if(!token) return res.status(401).send('Access denied. Sign in or register.');
try{
const decoded = jwt.verify(token, config.get('jwtPrivateKey'));
req.user = decoded;
next();
}
catch(err){
res.status(400).send('Invalid Token!');
}
}
здесь я использую функцию промежуточного программного обеспечения аутентификации:
const express = require('express');
const router = express.Router();
const auth = require('../middleware/auth');
// but it's actually not passing the user in since i haven't done it with cookies.
router.get('/', auth, (req, res) =>{
res.render('index', {});
});
Я знаю, что могу сделать это с помощью localStorage, но это ужасная практика, и было бы лучше хранить ее на куки, чтобы никто не мог взломать. Есть ли хороший подход для решения этой проблемы? Я вроде как потерял и потерял надежду go вернуться к sessionID (чего я не хочу :().