node.js - 更改页面时会话丢失,Passport.js
问题描述
我有一些问题要让我的会话在每个页面之间保持活跃。我正在使用快递、节点和护照。
护照配置,在我尝试登录时对我进行了很好的验证。
const db = require("../models");
const User = db.users;
const bcrypt = require("bcrypt");
const localStrategy = require("passport-local").Strategy;
module.exports = function (passport) {
passport.use(
new localStrategy(
{
usernameField: "email",
passwordField: "password",
},
function (username, password, done) {
User.findOne({ where: { email: username } }).then((user) => {
if (!user) return done(null, false);
bcrypt.compare(password, user.password, (err, result) => {
if (err) throw err;
if (result === true) return done(null, user);
else return done(null, false);
});
});
}
)
);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findOne({ id: id }, (err, user) => {
done(err, user);
});
});
};
登录功能:
exports.login = (req, res, next) => {
passport.authenticate("local", (err, user, info) => {
if (err) throw err;
if (!user) res.send("Impossible de trouver cet utilisateur");
else {
req.logIn(user, (err) => {
if (err) throw err;
//res.send('Authentification réussie.');
const session = req.session;
session.user = req.user;
console.log(req._passport.session) //Send { user: XX}
res.send(user);
console.log(req.session)
});
}
})(req, res, next);
};
这也在我的 app.js 中(server.js 等效)
require("dotenv").config({ path: "./config/.env" });
require("./middleware/passport-config")(passport);
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: {
maxAge: 1000 * 60 * 60 * 24 // = 1day
},
})
);
app.use(cookieParser(process.env.SESSION_SECRET));
app.use(passport.initialize());
app.use(passport.session());
尝试发送会话中的内容时,如果我更改页面,它总是空的。如果需要更多信息,我会更新这篇文章。提前致谢
解决方案
推荐阅读
- php - 在 Windows 记事本上查看文件时“\r\n”不起作用
- c# - 动态列表到数据表的转换
- c# - 尽管我使用了 Take() 方法,EF Core 还是返回了所有数据
- azure - 如何在运行时从 appsettings.json 读取 CRON 表达式?
- sql-server - 如何在sql server中创建一个函数来查找数据是否存在?
- python - 循环遍历数据框中的行和列
- python - 无法启动 Spyder (Anaconda)
- reactjs - 反应表选择框过滤
- angular - 单击它们并添加侦听器时,在谷歌地图上制作几个可编辑的圆圈
- java - 在 Windows 上使用 JNI 从 Java 调用 Golang 导致“动态链接库 (DLL) 初始化例程失败”