2014-10-07 2 views
0

Я новичок в node.js, и я пытаюсь реализовать простейшую авторизацию в Express. Я хочу установить req.session.userId для ID пользователя из базы данных. Я могу получить идентификатор пользователя из базы данных, используя простую форму и отправить запрос, но я не могу установить req.session.userId. Самая непостижимая вещь для меня - почему иногда req.session работает, а иногда нет. Мой код для пояснения. в app.js:req.session не задается с почтовым запросом

Настройка сегмента:

app.use(express.session({secret: 'asdads', key: 'sid', cookie: { maxAge: 600000, httpOnly: false }})); 

После того, что я обрабатывать запрос POST с:

app.post('/login', routes.authorize); 

Мой routes.authorize:

exports.authorize = function(req, res){ 
    if(req.body){ 
     var login = req.body.login; 
     var password = req.body.password; 
    //gET USER FROM DATABASE 
     db.getUser(login, password, function(err, results){ 
    //ensure that results is correct 
      console.log(results); 
      if(err){ res.send("User not found", 500); return;} 
    //PLACE WITH BUG :) 
      req.session.userId = results[0].id; 
     }); 
    } 
    res.render('login', { title: 'Express!' }); 
} 

I думаю, я не мог установить req.session.userId в этом месте, ause я обращаюсь сюда через POST. Если я прав, пожалуйста, помогите мне получить доступ к req.session в этом месте.

Заранее спасибо.

ответ

1

Я думаю, проблема в том, что вы немедленно отвечаете на запрос до завершения вашего db.getUser(). Второе программное обеспечение промежуточного программного обеспечения IIRC сохраняет сессию при отправке ответа, поэтому попробуйте что-то вроде этого:

exports.authorize = function(req, res) { 
    if (!req.body) 
    return res.render('login', { title: 'Express!' }); 

    var login = req.body.login; 
    var password = req.body.password; 

    db.getUser(login, password, function(err, results) { 
    if (err) 
     return res.send("User not found", 500); 
    req.session.userId = results[0].id; 
    res.render('login', { title: 'Express!' }); 
    }); 
} 
+0

Большое спасибо! Я думал о синхронизации/асинхронном исполнении, но я использую node.js только второй день, и мне довольно сложно ловить ошибки вроде этого! – kimonniez

+0

Если вы здесь ... :) Как сделать перенаправление после req.session.userId = results [0] .id; ?? – kimonniez

+0

Вы можете перенаправить с помощью ['res.redirect()'] (http://expressjs.com/4x/api.html#res.redirect). – mscdex

Смежные вопросы