Переменная сеанса недоступна для разных маршрутов - PullRequest
0 голосов
/ 19 мая 2018

Я давно сталкиваюсь с этой проблемой и, наконец, решил опубликовать ее здесь.Я сохраняю переменную сеанса в одном маршруте, и когда я пытаюсь получить доступ к ней из другого маршрута, она не определяется.

файл server.js

var express=require('express');
app=express();
var port=process.env.PORT || 8080;
var mongoose=require('mongoose');
var router=express.Router();
var appRoutes=require('./routes/api')(router);
var session=require('express-session');
var MongoStore=require('connect-mongo')(session);
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({
    secret:'hardik',
    saveUninitialized: true,
    resave: true,
    store: new MongoStore({mongooseConnection:mongoose.connection})
}));
app.listen(port,function(){
    console.log('running on port '+port);
});

api.js

router.post('/authenticate',function(req,res){
    var token=jwt.sign({
        email:req.body.email
    },secret);
    var profile=req.body.profile;
    req.session.token=token;
    console.log(req.session);
    console.log(req.session.token);
}

и после этого он покажет токен, если я войду чуть ниже этой линии, но на любых других маршрутах, если я попытаюсь войти в систему, он выдаст неопределенное значение.любая помощь приглашена.

1 Ответ

0 голосов
/ 19 мая 2018

Если вы используете паспорт после входа в систему, вы можете сопоставить весь маршрут с * и сохранить сеанс с req.locals

app.get('*', function(req, res, next){
  res.locals.user = req.user || null;
  next();
});

Добавьте эту строку перед запуском вашего сервера

...