2014-10-04 56 views
0

我正在使用快遞和MySQL,我試圖完成我的登錄功能。更改會話對象內部回調與快遞

app.post('/login', function(req, res){ 
    var username = req.body.username; 
    var password = sha1(req.body.password); 
    db.query("SELECT user_id, username FROM users WHERE username = '" + username + "' AND password = '" + password + "';", function(err, rows, fields){ 
     if(rows.length > 0){ 
      console.log("User " + username + " connected."); 
      req.session.user_id = rows[0].user_id; 
     } 
}); 

});

正如你所看到的,我對數據庫進行了查詢,如果用戶名和密碼匹配(rows.length> 0),我嘗試通過在會話對象中添加他的id來登錄用戶。

問題是req.session只是在回調內部修改的,我找不到全局的方法......我嘗試調用一個函數登錄(id),但這也不起作用。

有一點幫助會很好,謝謝。

+0

你能舉一個你想要完成的例子嗎? – mscdex 2014-10-04 22:32:34

+0

也許你正在尋找的是'express-session'模塊? – jfriend00 2014-10-04 22:49:41

+0

我有模塊,但我想出了一種方法來使用它與全局變量,謝謝。 – 2014-10-06 09:17:55

回答

0

好吧,我試過護照,但我認爲這太多了,因爲我做的東西很小,所以添加到我的應用程序中太多了。 我想通過使用app.locale這個全局變量來改變會話對象的方法,然後通過銷燬它。

編輯:這裏是我是如何做的:

  if(rows.length > 0){ 

       // Put the user_id and its username on a global var 
       app.locals.user_id = rows[0].user_id; 
       app.locals.username = rows[0].username; 
       res.redirect('/login'); 

       console.log("User " + username + " connected.".green); 
      } 

當我有/登錄POST請求

 if(app.locals.user_id){ 
      // Change the session object 
      req.session.user_id = app.locals.user_id; 
      req.session.username = app.locals.username; 
    } 

我想有更好的方法來做到這一點,但它的工作原理呢。

0

使用Mysql DB驗證用戶身份的最佳方法是將passport.js添加到應用程序。

請參閱本次回購的完整示例:Node-Express-Passport-Mysql authentication

如果你不能讓它工作,讓我知道,我會在我回家時發佈一個完整的代碼示例。

+0

謝謝你的回答,我明天再看看,並讓你知道。 – 2014-10-04 23:29:03