即使在重新加载主文件 (index.js) 后,如何让用户保持登录状态?
How to keep user logged in even after reloading the main file (index.js)?
我有一个 Express 应用程序,它使用 express-session
和 passport
来保持会话的进行。
这些技术使用户保持登录状态,直到他们点击注销按钮。
但是,有一个异常会导致用户注销。
我使用 PM2 重新加载我的 index.js 文件。命令如下。
pm2 reload all
当我执行上述命令时,index.js 文件被重新加载并且一切正常。
但是,我意识到每次使用此命令重新加载 index.js 文件时,登录用户都会注销,这是不应该发生的。
任何人都可以告诉我如何在我重新加载 index.js 文件后让用户保持登录状态吗?
index.js 文件中的部分代码:
var express = require("express");
var app = express();
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var session = require("express-session");
passport.serializeUser(function(user, done) {
done(null, user.email);
});
passport.deserializeUser(function(username, done) {
findByUsernameDb(username, function(err, user) {
if (err) {
return done(err);
}
done(err, user);
});
});
passport.use("login", new LocalStrategy({
usernameField: "email",
passwordField: "password"
},
function(username, password, cb) {
findByUsernameDb(username, function(err, user) {
if (err) {
return cb(err);
}
if (!user) {
return cb(null, false, { message: "Incorrect email." });
}
bcrypt.compare(password, user.password, function(err, res) {
if (res) {
return cb(null, user);
} else {
return cb(null, false, { message: "Incorrect password." });
}
});
});
}
));
app.use(cookieParser('hello'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
secret: 'world',
resave: true,
saveUninitialized: true
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
使用一种持久会话存储引擎。这是一个列表 https://github.com/expressjs/session#compatible-session-stores
我有一个 Express 应用程序,它使用 express-session
和 passport
来保持会话的进行。
这些技术使用户保持登录状态,直到他们点击注销按钮。
但是,有一个异常会导致用户注销。
我使用 PM2 重新加载我的 index.js 文件。命令如下。
pm2 reload all
当我执行上述命令时,index.js 文件被重新加载并且一切正常。
但是,我意识到每次使用此命令重新加载 index.js 文件时,登录用户都会注销,这是不应该发生的。
任何人都可以告诉我如何在我重新加载 index.js 文件后让用户保持登录状态吗?
index.js 文件中的部分代码:
var express = require("express");
var app = express();
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var session = require("express-session");
passport.serializeUser(function(user, done) {
done(null, user.email);
});
passport.deserializeUser(function(username, done) {
findByUsernameDb(username, function(err, user) {
if (err) {
return done(err);
}
done(err, user);
});
});
passport.use("login", new LocalStrategy({
usernameField: "email",
passwordField: "password"
},
function(username, password, cb) {
findByUsernameDb(username, function(err, user) {
if (err) {
return cb(err);
}
if (!user) {
return cb(null, false, { message: "Incorrect email." });
}
bcrypt.compare(password, user.password, function(err, res) {
if (res) {
return cb(null, user);
} else {
return cb(null, false, { message: "Incorrect password." });
}
});
});
}
));
app.use(cookieParser('hello'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
secret: 'world',
resave: true,
saveUninitialized: true
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
使用一种持久会话存储引擎。这是一个列表 https://github.com/expressjs/session#compatible-session-stores