Токен сеанса потерян во время перенаправления.Экспресс Node.js - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть Node.js с Express. Я делаю аутентификацию с использованием cookieSession

app.use(cookieSession({
  name: 'session',
  keys: ['key1','key2'],
  // Cookie Options
  maxAge: 24 * 60 * 60 * 1000 // 24 hours
}));

И мой контроллер для установки токена

exports.student_logIn = function(req, res) {
  req.session = null;

  Student.findOne({ email: req.body.email }, function (err, user) {
   if (err) return res.status(500).send('Error on the server.');
   if (!user) return res.status(404).send('No user found.');
   var passwordIsValid = bcrypt.compareSync(req.body.password_logIn, 
   user.password);
   if (!passwordIsValid){
   return res.status(401).send({ auth: false, token: null });
   }

    var token =
    {
      userId : jwt.sign({ id: user._id }, config.secret, {
      expiresIn: 86400 // expires in 24 hours
    })
    }
    console.log('Creating token '+user._id);
    var cookie = req.session;

    if (!cookie) {
      req.session = token;
      console.log('Provided new token');
     } else {
       console.log('Valid cookie session');
     }

     res.status(200).redirect('/student_profile');
  });
};

Главный контроллер, который будет отправлять данные профиля на основе токена:

exports.student_profile = function(req, res){
  var token = req.session.userId;
  if (!token){
    console.log('Here NO TOKEN!');
  return res.status(401).send({ auth: false, message: 'No token provided.' 
});
}
jwt.verify(token, config.secret, function(err, decoded) {
     if (err){
       return res.status(500).send({ auth: false, message: 'Failed to 
authenticate token.' });
     }
     async.parallel({
       student: function(callback){
         Student.findById(decoded.id,{password:0}).exec(callback);
       },
       projects: function(callback){
         Project.find({student:decoded.id}).exec(callback);
       }
     }, function(err,results){
       if (err) { return next(err); }
             if (results.student==null) { // No results.
                 var err = new Error('Student not found');
                 err.status = 404;
                 return next(err);
               }
        res.render('student_area_profile',{title: 'Student Profile',student 
  : results.student, projects: results.projects});
     });
   });
  };

Этот код работает нормально, когда я использую представления ejs в том же порту. Пару дней назад я решил перевести front-end на Angular. При доступе через другой порт токен теряется при перенаправлении. Я использовал этот фрагмент для CORS:

var cors = require('cors');
app.use(cors());

Я получаю сообщение «Здесь НЕТ ЖЕЛЕЗНЫХ!» со второго вырубил. Я буду признателен за любую помощь. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...