簡體   English   中英

具有express-sessions和express-mysql-session的NodeJS沒有設置會話。 我搞砸了哪里?

[英]NodeJS with express-sessions and express-mysql-session isn't setting the sessions. Where did I screw up?

嘗試使用Node.js和Express為我的個人項目工作。 我正在使用MySQL數據庫作為我的會話存儲,並安裝了以下模塊:

  • 表達
  • body-parser ,用於獲取POST數據
  • mysql ,連接到我的DB
  • CORS
  • 快遞會話
  • 表達MySQL的會話
  • bcrypt ,用於將POST數據與DB哈希進行比較

我正在通過javascript從頁面發送包含登錄信息的POST請求,我將其與數據庫中的哈希進行比較。 如果匹配,我為用戶創建會話。 我想阻止用戶再次登錄,如果它有一個會話,但看起來似乎沒有存儲會話cookie。 我通過查看req.session驗證了這req.session ,但我創建的user對象從未出現過。

正在創建數據庫中的記錄:如果我使用正確的數據登錄,則會創建新記錄。 我不確定這是否應該發生但如果我再次使用同一用戶登錄它會創建一個新記錄。

這是我得到的:

var express    = require('express');
var app        = express();
var bodyParser = require('body-parser');
var mysql      = require('mysql');
var cors       = require('cors');
var session    = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var bcrypt     = require('bcrypt');

var options = { ... };
var pool = mysql.createPool(options);
var sessionConnection = mysql.createConnection(options);

var sessionStore = new MySQLStore({
    expiration: 10800000,
    createDatabaseTable: true,
    schema: {
        tableName: 'USERS_SESSIONS',
        columnNames: {
            session_id: 'session_id',
            expires: 'expires',
            data: 'data'
        }
    }
}, sessionConnection);

// i'll change key & secret later
app.use(session({
    key: '69Atu22GZTSyDGW4sf4mMJdJ42436gAs',
    secret: '3dCE84rey8R8pHKrVRedgyEjhrqGT5Hz',
    store: sessionStore,
    resave: false,
    saveUninitialized: true
}));

app.use(cors());

...

var router = express.Router();

router.post('/login', function(req, res){
    if (req.session.user){
         console.log('already logged in');
    }else{
        // get connection from pool, retrieve user record
        // PLAIN is password from request, row.HASH is the record's hash
        bcrypt.compare(PLAIN, row.HASH, function(err, match){
            // do error handling
            // when match = true do this

            req.session.user = {
                id: row.ID,
                nickname: row.NICK,
                isAuthed: true
            };
            res.sendStatus(200); // else send 401
            return;
        });
    }
});

成功登錄后,我會檢查我的會話:

router.get('/session', function(req, res){
    res.json(req.session);
});

我得到以下內容:

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}

如您所見,沒有user對象。 我沒有得到任何錯誤,我無法弄清楚問題出在哪里。

var cookieParser = require('cookie-parser');

請添加app.use(cookieParser()); 之前

app.use(session({
    key: '69Atu22GZTSyDGW4sf4mMJdJ42436gAs',
    secret: '3dCE84rey8R8pHKrVRedgyEjhrqGT5Hz',
    store: sessionStore,
    resave: false,
    saveUninitialized: true
}));

有關詳細文檔, 請訪問https://www.npmjs.com/package/cookie-parser

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM