![](/img/trans.png)
[英]express-mysql-session "expires" value of session is messed up
[英]NodeJS with express-sessions and express-mysql-session isn't setting the sessions. Where did I screw up?
嘗試使用Node.js和Express為我的個人項目工作。 我正在使用MySQL數據庫作為我的會話存儲,並安裝了以下模塊:
我正在通過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
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.