用passport.js、mysql和express-session持久化登录状态
Persisting login states with passport.js, mysql, and express-session
我有一个使用Passport.js通过facebook认证用户的应用程序,并且可以成功地这样做。然而,每当我的node.js服务器被重置时,用户就会注销。
似乎快车会话是去坚持登录状态的方式,但我读过的每一个答案似乎都说你必须使用mongodb或redis来实现这一点。我们正在使用Mysql
是否有一种方法使用express-sessions与mysql持久化登录状态?
您可以使用session (express-session)来实现这一点。我现在用的是这个组合Express, Express -session, Express -mysql-session(用于存储),passport with 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相关文章:
- Express Session and Cookie
- express req.session对象是如何持久化的
- req.session 未在 Express.js 中定义
- Express: Accessing req.session from /models/index.js
- Coffeescrapt+Express.js:将req.session传递给模型类的有效方法
- node.js express-session是无状态的还是有状态的
- 我不知道如何使用session-express来保存会话
- Express - Session不会在后续SSE请求之间被保存
- Express-session变量在加载api后改变
- express-session不能与express 4.13一起工作
- Express-mysql-session阻止passport deserializeUser运行
- 如何使用express-session作为认证处理程序
- 用passport.js、mysql和express-session持久化登录状态
- 如何将express-session request. session.user附加到chai-http request
- Express-session:第一个用户会话被第二个用户会话覆盖
- Node.js express-session + redis单实例问题
- Express.js和connect-mongo-session"TypeError:无法读取属性'混
- LoginToken和Session的区别?Node.js express connect
- 在一个路由文件中定义的Express-session在app.js中不可用
- req.session未定义为express和connect-redis