2016-05-07 9 views
0

Ich verwende express-session und versuchen, Postgres als meine Session-Speicher zu verwenden:Express Postgres Sessions funktionieren nicht richtig

app.use(session({ 
    store: new (require('connect-pg-simple')(session))(), 
    secret: 'mysessionsecret', 
    resave: false, 
    cookie: { 
     maxAge: 7 * 24 * 60 * 60 * 1000 
    } 
    })); 

Aber wenn ich meinen Server laufen lasse, erhalte ich

2016-05-07T14:19:05.571491+00:00 app[web.1]: error: no pg_hba.conf entry for host "my.ip.address", user "myuser", database "databasename", SSL off 

Was bin ich falsch machen?

Antwort

1

Try this:

var pgSession = require('connect-pg-simple')(session); 
app.use(session({ 
    store: new pgSession({ 
     conString : process.env.DATABASE_URL 
    }), 
    secret: 'mysessionsecret', 
    resave: false, 
    cookie: { 
     maxAge: 7 * 24 * 60 * 60 * 1000 
    }, 
    secure : true 
})); 
+0

Es scheint keine "sichere" Option zu geben – Shamoon

1

Es gibt keinen Eintrag in der Host-basierten Authentifizierungsdatei von PostgreSQL pg_hba.conf für Host "my.ip.address", Benutzer "myuser", Datenbank "Datenbankname", mit SSL aus.

Wahrscheinlich haben Sie PostgreSQL so konfiguriert, dass nur Verbindungen von der Loopback-Adresse 127.0.0.1 akzeptiert werden.

Siehe the manual for pg_hba.conf und allgemeiner the client authentication chapter.


OK, also connect-pg-simple gets its connection info from the DATABASE_URL environment variable by default. In den Kommentaren versuchen Sie, eine Verbindung zu einer Herkoku PostgreSQL-Instanz herzustellen, vermutlich von außerhalb von Heroku, wo DATABASE_URL nicht festgelegt ist. Sie sollten daher DATABASE_URL env var auf einen geeigneten Wert setzen und sicherstellen, dass sslmode=require enthalten ist (siehe Heroku-Dokumentation) oder die URL als connString-Parameter an connect-pg-simple übergeben.

+0

Wie kann ich dies mit Heroku zu arbeiten? – Shamoon

+0

Nun, das wäre ein nützliches Detail gewesen, um es am Anfang aufzunehmen. Für Heroku ist Ihr Problem, dass * Heroku SSL-Verbindungen erfordert * und * Sie nicht versuchen, eine Verbindung mit SSL * herzustellen. Sie scheinen eine Art Wrapper namens 'connect-pg-simple' zu ​​verwenden; [das Handbuch dafür] (https://www.npmjs.com/package/connect-pg-simple) schlägt vor, dass es die Verbindungszeichenfolge von 'DATABASE_URL' in der Umgebung liest, wenn es auf Heroku usw. läuft. Wenn nicht verfügbar, Sie sollte eine Verbindungszeichenfolge angeben. Ich kenne Node.js nicht, aber ich schlage vor, den Parameter 'connString' als Heroku' DATABASE_URL' zu übergeben. –

+0

Richtig - aber ich gebe die DB-Verbindung nirgendwo an, deshalb bin ich mir nicht sicher, wo ich die Verbindung für die Sitzung angeben soll – Shamoon

Verwandte Themen