持续会话连接会话集合

我正在build立一个login系统的网站,我希望用户即使在浏览器closures后也能保持login状态。 只有在用户注销时才销毁会话。 我在网上search了解决scheme,并且遇到了使用connect-session-sequelize的build议。 我阅读了文档,并尽了最大的努力使代码工作,但是我缺乏这方面的经验。

问题:

我的代码没有给我保持一个用户在服务器重新启动后login的结果。 我的代码是:

var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); var session = require('express-session'); var SequelizeStore = require('connect-session-sequelize')(session.Store); var pug = require('pug'); var bodyParser = require('body-parser'); var bcrypt = require('bcrypt'); app.use(bodyParser.urlencoded({ extended: true })); app.use(express.static('public')); app.use(cookieParser()); app.set('views', './views'); app.set('view engine', 'pug'); var Sequelize = require('sequelize'); var db = new Sequelize('postgres://'+ process.env.POSTGRES_USER + ':' + process.env.POSTGRES_PASSWORD + '@localhost/terranova', { host: 'localhost', dialect: 'postgres', storage: './session.postgres', define: { timestamps: true } }); var sessionStore = new SequelizeStore({ db: db, checkExpirationInterval: 15 * 60 * 1000, expiration: 24 * 60 * 60 * 60 * 1000 }); app.use(session({ secret: 'salajhgdusdajss', store: sessionStore, resave: false, saveUninitialized: false, proxy: true })); sessionStore.sync() var Session = db.define('Session', { sid: { type: Sequelize.STRING, primaryKey: true }, userId: Sequelize.STRING, expires: Sequelize.DATE, data: Sequelize.STRING(50000) }); var User = db.define('user', { username: Sequelize.STRING, password: Sequelize.STRING, }); function extendDefaultFields(defaults, session) { return { data: defaults.data, expires: defaults.expires, userId: session.userId }; } var store = new SequelizeStore({ db: db, table: 'Session', extendDefaultFields: extendDefaultFields 

});

子问题

  1. 该文档指出添加“var store = new SessionStore”而不是“var store = new SequelizeStore”,但它给了我一个错误:“SessionStore未定义”。 不知道我是否做错了什么?

  2. 我可以在“用户”表格内看到,但由于某种原因,我无法查看“会话”表格中的“select * from Sessions”。 我得到“关系”会议的回应“不存在”。 这是为什么? 在这里input图像说明

  3. 到期日:24 * 60 * 60 * 1000 – >默认24小时到期。 这是否表明会议的时间? 如果是的话,那么最大可能的时间是多less(如果无限是不可能的话)?

有人可以请我解释一下,我需要做些什么/添加/删除我的代码才能实现我的目标?

欲了解更多信息,这里是login页面…

 app.get('/login', function(req,res) { res.render('login') }) app.post('/login', function(req,res) { var username = req.body.username var password = req.body.password User.findOne({ where: { username: username } }).then(function(user) { if(username.length === 0 || password.length === 0) { res.render('login', { message: "Username or password missing" }); return; }; if(user == null) { res.render('login', { message: "User not in the system, please register" }); return; } else { var hash = user.password bcrypt.compare(password, hash, function(err, result) { if (err) { res.render('login', { message: 'Invalid email or password, please try again or register' }) }; if(result === true) { req.session.user = user; res.redirect('/home'); } else { res.render('login', { message: "Something went wrong, please try again" }); }; }); }; }); }) 

…这是主页。

 app.get('/home', function(req,res) { var user = req.session.user if (user === undefined) { res.render('login', { message: 'Please log in to have the access' }); } else { res.render('home', { user: user }); } }) 

非常感谢帮助我!