我正在研究Node和PostgreSql(版本10)。
我正在创建一个具有登录功能的示例应用程序。
完成登录工作后,我发现更新代码并重新运行节点应用程序后,登录会话到期并注销我。
我发现了如何使用connect-pg-simple
将登录会话存储在postgresql数据库中,但是当我尝试这样做时,它向我显示以下错误:
Failed to prune sessions: password authentication failed for user "admin"
AND
Failed to prune sessions: role "admin" does not exist
错误“ Admin”中的所说用户是我的系统用户
它在哪里泄漏?
代码:
const conObject = {
host: 'localhost',
port: 5433,
user: 'postgres',
password: 'kashyap2468',
database: 'partgator'
};
const pgSession = require('connect-pg-simple')(session);
const pgStoreConfig = {
pgPromise: require('pg-promise')({ promiseLib: require('bluebird') })({
conObject }), // user either this
}
app.use(session({
store: new pgSession(pgStoreConfig),
secret: 'jW8aor76jpPX', // session secret
resave: true,
saveUninitialized: true,
cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 } // 30 days
}));
app.use(flash());
答案 0 :(得分:0)
这使我的工作更简单
尝试了很多我用以下代码完成的事情 并使用相同的逻辑对问题进行了排序
登录会话将由Knex存储在会话表本身中
const session = require('express-session');
const KnexSessionStore = require('connect-session-knex')(session);
const Knex = require('knex');
const db = require('./knexfile');
global.knex = Knex(db[environment]);
const store = new KnexSessionStore({
knex: knex,
tablename: 'sessions' // optional. Defaults to 'sessions'
});
app.use(session({
secret: 'keyboard cat',
store: store,
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 365 * 24 * 60 * 60 * 1000,
expires: false
}
}));
答案 1 :(得分:0)
我有同样的问题。在我的情况下,问题是express-session没有连接字符串,因此错误提示:
"Failed to prune sessions: password authentication failed for user "egarcia"
这是正确的示例代码:
var PostgreSqlStore = require('connect-pg-simple')(session);
var sessionOptions = {
secret: "secret",
resave : true,
saveUninitialized : false,
store : new PostgreSqlStore({
/*
connection string is built by following the syntax:
postgres://USERNAME:PASSWORD@HOST_NAME:PORT/DB_NAME
*/
conString: "postgres://postgres:postgres@localhost:5433/postgres"
})
};
app.use(session(sessionOptions));
如果您遇到用户问题,则可能是连接字符串存在问题,该问题已丢失或不正确。