Express.js + расширение Google Chrome: возможно ли хранение сессии? - PullRequest
1 голос
/ 28 февраля 2012

Я работаю над расширением Google Chrome с всплывающим окном, в котором я загружаю страницу с сервера node.js + express.js.Страница, которую я загружаю, изменяется в зависимости от статуса req.session.user следующим образом:

app.get('/', function(req, res){
    if(req.session.user){
        res.render(__dirname + '/pages/base.jade', {});
    }
    else{
        res.render(__dirname + '/pages/login_register.jade', {});
    }
});

Если req.session.user имеет значение null, я отправляю страницу, на которой пользователь может выполнить вход или зарегистрироваться.Если он / она выполняет вход в систему, это происходит на сервере:

app.post('/login', function(req, res){
    var user = {};
    user.username = req.body.username;
    user.password = req.body.password;
    checkLogin(user, function(foundUser){
        //login correct
        console.log("login!");
        req.session.user = foundUser;
        res.render(__dirname + '/pages/base.jade', {
        });
    });
});

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

Мой вопрос: поддерживает ли всплывающее окно хранение сессии в express.js?сервер?Если да, то с моим кодом что-то не так, может кто-нибудь указать, что я делаю не так?Спасибо.

РЕДАКТИРОВАТЬ:

Вот как я настраиваю сервер:

var app = express.createServer(
    express.logger(),
    express.cookieParser(),
    express.session({ secret: 'keyboard cat' })
);

app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });

Я мог бы делать что-то избыточное здесь, так как у меня все еще нет глубокогопонимание того, как это работает.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Проблема в том, как вы настроили свой сервер - вы используете промежуточное ПО cookieParser и session дважды:

var app = express.createServer(
    express.logger(),
    express.cookieParser(),
    express.session({ secret: 'keyboard cat' })
);

app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));

Вы должны использовать только или промежуточное ПО в качестве параметров для createServer, или use, поэтому:

var app = express.createServer();

app.use(express.logger());
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
0 голосов
/ 28 февраля 2012

Всплывающая страница, вероятно, перезагружается при каждом ее открытии. Вы должны создать фоновую страницу для вашего расширения, где вы можете хранить / управлять сессиями. Затем вы можете общаться из всплывающих окон на фоновую страницу, передавая сообщения документы . Используя обмен сообщениями, вы можете отправить данные для входа на фоновую страницу, а также спросить, вошел ли пользователь в систему.

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