使用passport.js,mysql和express-session持久login状态

我有一个应用程序,使用Passport.js通过Facebookvalidation用户,并可以成功地做到这一点。 但是,只要我的node.js服务器被重置,用户就会被注销。

看起来像快速会话是坚持login状态的方式,但是我读过的每个答案似乎都说你必须使用mongodb或redis来实现这一点。 我们正在使用Mysql。

有没有办法使用快递会话与MySQL来坚持login状态?

你可以使用会话(快速会议)来实现。 我目前正在使用这个组合express,express-session,express-mysql-session(用于存储),带有facebook和twitter策略的护照。 一个基本的设置可能是这样的。

var express = require('express'); var session = require('express-session'); var MySQLStore = require('express-mysql-session')(session); var app = express(); var options = { host: '',// Host name for database connection. port: '',// Port number for database connection. user: '',// Database user. password: '',// Password for the above database user. database: ''// Database name }; var connection = mysql.createConnection(options); var sessionStore = new MySQLStore({ checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds. expiration: 86400000,// The maximum age of a valid session; milliseconds. createDatabaseTable: true,// Whether or not to create the sessions database table, if one does not already exist. schema: { tableName: 'sessions', columnNames: { session_id: 'session_id', expires: 'expires', data: 'data' } } }, connection); app.use(session({ key: 'MyKey', secret: 'MySecret', cookie: {domain: '.mydomain.com', httpOnly: true, secure: false}, domain: '.mydomain.com', store: sessionStore, resave: true, saveUninitialized: true })); /** * Session handle for passport */ app.use(passport.initialize()); app.use(passport.session()); /** * Check if user is authenticated in a route */ function authUser (req, res, next) { if (!req.isAuthenticated()) { res.redirect('/login') } else { next(); } } router.get('/hello', authUser, function(req, res){ //Code }); /** * Start the server on port defined by configuration */ app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port')); 

更多信息:

https://github.com/expressjs/session

https://github.com/chill117/express-mysql-session