Ответ 1
Изначально в это, это простое исправление. Просто подключитесь к HTTPS вместо
Я разрабатываю приложение Node.js, используя PostgreSQL и хостинг на Heroku. Моя проблема в том, что я получаю ошибку аутентификации, например:
14:32:05 web.1 | { [error: no pg_hba.conf entry for host "193.40.244.196", user "username", database "database_name", SSL off]
14:32:05 web.1 | length: 168,
14:32:05 web.1 | name: 'error',
14:32:05 web.1 | severity: 'FATAL',
14:32:05 web.1 | code: '28000',
14:32:05 web.1 | detail: undefined,
14:32:05 web.1 | hint: undefined,
14:32:05 web.1 | position: undefined,
14:32:05 web.1 | internalPosition: undefined,
14:32:05 web.1 | internalQuery: undefined,
14:32:05 web.1 | where: undefined,
14:32:05 web.1 | file: 'auth.c',
14:32:05 web.1 | line: '483',
14:32:05 web.1 | routine: 'ClientAuthentication' }
Это может быть проблема SSL, но здесь не должно упоминаться здесь. SSL следует поддерживать из коробки. Итак, я в тупике и могу только спросить, что может вызвать эту ошибку?
Я не уверен, что мне нужно изменить pg_hba.conf в моей системе, но я даже не могу его найти.
Изначально в это, это простое исправление. Просто подключитесь к HTTPS вместо
Решил его, установив PGSSLMODE
(http://www.postgresql.org/docs/9.0/static/libpq-envars.html) на Heroku. Он сообщает PostgreSQL по умолчанию SSL.
$ heroku config:set PGSSLMODE=require
node -postgres не поддерживает SSL в нем привязки javascript, которые вы используете, если вы делаете:
var pg = require('pg');
Чтобы получить SSL, вам нужно использовать встроенное связывание, выполнив следующее:
var pg = require('pg').native;
Вам не нужно использовать SSL, когда ваше приложение работает в Heroku, вам нужно использовать только SSL для удаленного подключения (когда приложение работает локально).
Я добавил эти параметры и теперь могу подключиться к экземпляру postgres heroku с внешнего сервера, в частности, в конфигурации knex.js на node экспресс-сервере:
var knex = require('knex')({
client: 'postgres',
connection: 'postgres://username:[email protected]:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory'
});
В один и тот же вопрос. Just Enabled ssl = true в параметрах db.
var pg = require('pg');
var params = { host: 'heroku_hostname',user: 'username',password: 'password',database: 'database',ssl: true };
var client = new pg.Client(params);
client.connect();