无法将会话存储在节点中的数据库中以获取Postgresql

时间:2019-03-05 04:08:40

标签: node.js postgresql

我正在研究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());

2 个答案:

答案 0 :(得分:0)

Connect Session Knex

这使我的工作更简单

尝试了很多我用以下代码完成的事情 并使用相同的逻辑对问题进行了排序

登录会话将由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));

如果您遇到用户问题,则可能是连接字符串存在问题,该问题已丢失或不正确。