Postgresql 快速会话、passport和connect pg生产中的简单问题
这是我第一次在这里发布问题。我希望你们能帮我解决这个问题。我对node.js,express是相当陌生的,因此,对于我的经验不足,我深表歉意 我当前在node.js express app中的身份验证会话有问题。我使用Passport.js来处理身份验证,我使用connect pg simple(PostgreSQL会话存储)存储登录会话。单击“登录”按钮后,会话存储在我的PostgreSQL数据库中,但express无法找到它。事实上,它在数据库中存储了两次会话,但其中只有一个获得了passport cookie 当服务器仍在本地主机上时,此问题不存在。当我将服务器托管在Heroku上时,会显示此消息 此外,每当我点击heroku repo时,它都会显示以下警告: connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程 我的猜测是我没有正确地将express会话连接到PostgreSQL express存储。下面是我的代码: 以下是我如何设置PostgreSQL数据库的:Postgresql 快速会话、passport和connect pg生产中的简单问题,postgresql,express,heroku,passport.js,express-session,Postgresql,Express,Heroku,Passport.js,Express Session,这是我第一次在这里发布问题。我希望你们能帮我解决这个问题。我对node.js,express是相当陌生的,因此,对于我的经验不足,我深表歉意 我当前在node.js express app中的身份验证会话有问题。我使用Passport.js来处理身份验证,我使用connect pg simple(PostgreSQL会话存储)存储登录会话。单击“登录”按钮后,会话存储在我的PostgreSQL数据库中,但express无法找到它。事实上,它在数据库中存储了两次会话,但其中只有一个获得了passp
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个会话的图像
这是我的登录路径(单击登录按钮时):
这是成功登录时重定向到的路由:
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
}
});
我已经在这里呆了几天了。如果你需要更多的代码,请告诉我 读这篇文章,你被卡住是什么意思?是有错误还是什么?@Darvesh我已经在上面的代码中尝试过了,但似乎不起作用。我确实将express会话连接到会话存储,但它仍然说我正在使用内存存储。我不知道为什么。读这篇文章你说你被卡住是什么意思?是有错误还是什么?@Darvesh我已经在上面的代码中尝试过了,但似乎不起作用。我确实将express会话连接到会话存储,但它仍然说我正在使用内存存储。我不知道为什么。
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
}
});