问题描述
这是我第一次在这里发布问题。我希望你们能帮我这个忙。表示,我对node.js还是很陌生,所以请您多加抱歉。
我的node.js Express应用程序中的身份验证会话目前存在问题。我使用Passport.js进行身份验证,并使用connect-pg-simple(PostgreSQL会话存储)存储登录会话。单击登录按钮后,该会话存储在我的PostgreSQL数据库中,但是以某种方式找不到它。实际上,它将会话两次存储在数据库中,但是只有其中一个在其中获得了护照cookie。
当服务器仍在本地主机上时,不存在此问题。当我在Heroku上托管服务器时出现。
此外,每当我推送到heroku存储库时,它都会显示以下警告:
“ connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程。”
我的猜测是我没有将Express会话正确连接到PostgreSQL Express存储。下面是我的代码:
这是我设置PostgreSQL数据库的方式:
const Pool = require("pg").Pool;
const pool = new Pool({
user: process.env.PGUSER,password: process.env.PGPASSWORD,host: process.env.PGHOST,port: process.env.PGPORT,database: process.env.PGDATABASE
});
module.exports = pool
这是我设置会话的方式:
const poolSession = new (require('connect-pg-simple')(session))({
pool : pool
})
app.set('trust proxy',1);
app.use(session({
store: poolSession,secret: process.env.SESSION_SECRET,saveUninitialized: true,resave: false,cookie: {
secure: true,maxAge: 30 * 24 * 60 * 60 * 1000
} // 30 days
}));
app.use(passport.initialize());
app.use(passport.session());
这是单击登录按钮时数据库中已存储2个会话的图像 https://i.stack.imgur.com/lzAby.png
这是我的登录路线(点击登录按钮时):
router
.route("/signin")
.post((req,res,next) => {
console.log("Signing in...")
passport.authenticate('local',function(err,user,info) {
//code....
req.logIn(user,function(err) {[enter image description here][1]
console.log(user);
if (err) {
console.log(err);
res.send(apiResponse(500,err.message,false,null))
return next(err);
}
console.log(req.sessionID); //The id of the 1st session store in db
console.log(req.isAuthenticated()) //True
res.redirect('/auth');
});
})(req,next);
})
这是成功登录后重定向到的路由:
router.get("/",(req,res) => {
console.log("/ ",req.isAuthenticated()); //False
console.log("/ ",req.sessionID); //The Id of the 2nd session store in db
if(req.isAuthenticated()){
//Notify user login success
}
});
我已经在这里停留了几天。请告诉我是否需要更多代码!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)