gpt4 book ai didi

javascript - 使用 passport.js、mysql 和 express-session 保持登录状态

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:17 26 4
gpt4 key购买 nike

我有一个应用程序使用 Passport.js 通过 facebook 对用户进行身份验证,并且可以成功执行此操作。但是,每当我的 node.js 服务器重置时,用户都会注销。

似乎 express-sessions 是保持登录状态的方法,但我读过的每个答案似乎都说你必须使用 mongodb 或 redis 来实现这一点。我们正在使用 Mysql。

有没有办法使用 mysql 的快速 session 来保持登录状态?

最佳答案

您可以使用 session (express-session) 来实现。我目前使用这个组合express、express-session、express-mysql-session(用于存储)、带有 facebook 和 twitter 策略的 Passport 。基本设置可能是这样的。

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

关于javascript - 使用 passport.js、mysql 和 express-session 保持登录状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com