2017-04-12 60 views
0

我有3個文件:app.js,index.js(路線),Users.js(控制器)如何保存在expressjs數據/會話的NodeJS

一旦我的用戶的loggedIn(驗證POST信息之間進行DB)我想使用expressjs/session將數據保存在會話中。

這裏是我的會議在app.js聲明:

var session = require('express-session'); 

    app.use(session({ 
     resave: true, 
     saveUninitialized: true, 
     secret: 'trolololo' 
    })); 

這裏是我的路線:

router.post('/login', function(req, res, next) { 
    Users.login(req, res); 
}); 

router.get('/getSessionInfos', function(req,res,next){ 
    console.log(req.session); 
}); 

,這裏是爲登錄控制器:

login : function(req, res){ 
     var formEmail = req.body.email; 
     var formPassword = req.body.password; 

     User.findOne({ where: {email: formEmail} }).then(function(user) { 
      if(user){ 
       if (user.password == formPassword){ 
        console.log('User connected'); 
        req.session.email = formEmail; 
        req.session.password = formPassword; 
        console.log(req.session); 
        res.status(200).send('User Authentified'); 
       }else{ 
        res.status(401).send('Invalid Password'); 
       } 
      }else{ 
       res.status(401).send('Username'); 
      } 
     }); 
    }, 

登錄工程我得到了200狀態和我的console.log在登錄功能顯示一個函數與我在FOS。但是當我嘗試從/ getSessionInfos URL是空取我的會議......請給幫助

+0

是'/ getSessionInfos'中的整個代碼嗎?你只輸出到控制檯,你不會返回任何東西 – Gntem

+0

嗯,我認爲從expressjs/session文檔中,會話總是通過req.session.something獲取,正如我所說的,我得到會話對象,但它是空的。但是,這是所有/ getSessionInfos中的 –

回答

0

你的代碼似乎是正確的只有一些變化

app.use(session({ 
secret : 'yourSecret', 
resave : false, 
saveUninitialized : false, 
})); 

不忘先登錄你的存儲會話在那裏的價值,然後肯定會顯示與電子郵件和密碼鍵的對象。 如果您遇到任何問題,請告知我。

0

我知道你沒有問過這個問題,但我會說,不管怎麼說,session中不再推薦節點,json web令牌幾乎就是王位。本質上它是JSON中已簽名的一段數據格式。由於已簽名,收件人可以驗證其真實性。因爲它是JSON,所以重量很小。

簡單來說,JWT很酷,因爲您不需要在服務器上保留會話數據來驗證用戶身份。

  • 用戶調用認證服務,一般情況下將用戶名和密碼 。
    • 身份驗證服務使用簽名的JWT進行響應,該JWT表示用戶的身份爲 。
    • 用戶請求訪問發回令牌的安全服務。
    • 安全層檢查令牌上的簽名,如果它是真的,則授予訪問權限。

可以使用智威湯遜 - 中簡單NPM。