2012-04-23 3 views
23

Я разрабатываю приложение Node.js, используя PostgreSQL и хостинг на Heroku. Моя проблема заключается в том, что я получаю сообщение об ошибке аутентификации следующим образом:Ошибка аутентификации при подключении к базе данных Heroku PostgreSQL

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, но это не должно быть, как указано here. SSL следует поддерживать из коробки. Так что я в тупике и могу только спросить, что может вызвать эту ошибку?

Я не уверен, что мне нужно изменить pg_hba.conf в моей системе, но я даже не могу его найти.

ответ

3

В этом я уверен, это простое решение. Просто подключиться через HTTPS вместо

+1

Обычно просто для того, чтобы порт, равный 5572 из одного, указанного в «конфигурации героя», был достаточным. –

+13

«Просто подключитесь через HTTPS». Не могли бы вы уточнить? Вы имеете в виду указать порт 5572, как предлагает Дэвид Пелаес? Это не работает для меня, и не указывает ssl: true в параметрах, как кто-то другой, и не указывая оба. Я использую привязки javascript, а не native. – Jake

27

узел-Postgres не поддерживает SSL в это JavaScript привязок, которые вы с помощью, если вы:

var pg = require('pg'); 

Чтобы получить SSL, необходимо использовать нативный связывание как это сделать:

var pg = require('pg').native; 

вы не нужно использовать SSL, когда приложение работает в Heroku, вам нужно всего лишь использовать SSL для удаленного доступа (если приложение работает локально).

+0

Не требуется привязка для привязки SSL. – JVerstry

+1

Работал для меня ... спасибо! (если вы используете Sequelize, добавьте 'native: true' в объект опций' new Sequelize') – timborden

+2

Для этого требуется 'npm i pg-native' – standup75

7

Ran в этот же выпуск. 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(); 
+0

Это должен быть принятый ответ! – whirlwin

16

Я добавил этот Params и теперь могу подключиться к Heroku Postgres, например от внешнего сервера, в частности, в конфигурации knex.js в узле экспресса-сервере:

var knex = require('knex')({ 
    client: 'postgres', 
    connection: 'postgres://username:[email protected]:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' 
}); 
+0

спасибо за пример к примеру! где ты нашел эту информацию? – triniMahn

+0

не уверен! но я вижу, что это задокументировано, поэтому, возможно, это было здесь: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java – adrichman

+0

Это помогло мне! благодаря! – albertpeiro

35

решаемым его установки PGSSLMODE (http://www.postgresql.org/docs/9.0/static/libpq-envars.html) на Heroku. Он сообщает PostgreSQL по умолчанию SSL.

$ heroku config:set PGSSLMODE=require 
+6

должен быть отмечен как правильный ответ –

+0

Согласен. Это лучший ответ, поскольку он поддерживал мои локальные и удаленные версии, работающие с наименьшим количеством кода. – saoyr5

+0

Идеальное решение для Heroku, большое вам спасибо! – Sebastian

Смежные вопросы