【问题标题】:Postgresql Error: error: password authentication failed for user “postgres” in Adonis.jsPostgresql 错误:错误:Adonis.js 中用户“postgres”的密码验证失败
【发布时间】:2020-06-01 04:59:39
【问题描述】:

我有一个 Ubuntu 18.04 LTS vps,我在其中安装和配置了 postgresql。 我可以通过命令行登录到 postgresql。但我无法与我的项目建立连接。

但是在部署了一个 Adonis 项目之后,它给我带来了下面的错误消息 error: error: password authentication failed for user "postgres"

完整错误如下:

error: error: password authentication failed for user "postgres"
0|server  |     at Connection.parseE (project_directory/node_modules/pg/lib/connection.js:614:13)
0|server  |     at Connection.parseMessage (project_directory/node_modules/pg/lib/connection.js:413:19)
0|server  |     at Socket.<anonymous> (project_directory/node_modules/pg/lib/connection.js:129:22)
0|server  |     at Socket.emit (events.js:315:20)
0|server  |     at addChunk (_stream_readable.js:295:12)
0|server  |     at readableAddChunk (_stream_readable.js:271:9)
0|server  |     at Socket.Readable.push (_stream_readable.js:212:10)
0|server  |     at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
0|server  | From previous event:
0|server  |     at Client_PG.acquireRawConnection (project_directory/node_modules/knex/lib/dialects/postgres/index.js:147:12)
0|server  |     at create (project_directory/node_modules/knex/lib/client.js:280:23)
0|server  |     at project_directory/node_modules/tarn/lib/Pool.js:315:34
0|server  |     at Object.tryPromise (project_directory/node_modules/tarn/lib/utils.js:53:24)
0|server  |     at project_directory/node_modules/tarn/lib/Pool.js:315:17
0|server  |     at new Promise (<anonymous>)
0|server  |     at callbackOrPromise (project_directory/node_modules/tarn/lib/Pool.js:306:12)
0|server  |     at Pool._create (project_directory/node_modules/tarn/lib/Pool.js:236:9)
0|server  |     at Pool._doCreate (project_directory/node_modules/tarn/lib/Pool.js:208:36)
0|server  |     at Pool._tryAcquireOrCreate (project_directory/node_modules/tarn/lib/Pool.js:159:18)
0|server  |     at Pool.acquire (project_directory/node_modules/tarn/lib/Pool.js:85:14)
0|server  |     at project_directory/node_modules/knex/lib/client.js:335:26
0|server  | From previous event:
0|server  |     at Client_PG.acquireConnection (project_directory/node_modules/knex/lib/client.js:334:34)
0|server  |     at Runner.ensureConnection (project_directory/node_modules/knex/lib/runner.js:228:24)
0|server  |     at Runner.run (project_directory/node_modules/knex/lib/runner.js:34:42)
0|server  |     at Builder.Target.then (project_directory/node_modules/knex/lib/interface.js:20:43) {
0|server  |   length: 104,
0|server  |   severity: 'FATAL',
0|server  |   code: '28P01',
0|server  |   detail: undefined,
0|server  |   hint: undefined,
0|server  |   position: undefined,
0|server  |   internalPosition: undefined,
0|server  |   internalQuery: undefined,
0|server  |   where: undefined,
0|server  |   schema: undefined,
0|server  |   table: undefined,
0|server  |   column: undefined,
0|server  |   dataType: undefined,
0|server  |   constraint: undefined,
0|server  |   file: 'auth.c',
0|server  |   line: '333',
0|server  |   routine: 'auth_failed'
0|server  | }

虽然我做了一些研究并按照这些说明更新了pg_hba.conf 文件。如下:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            peer
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

这是我的项目环境(.env)文件

HOST=127.0.0.1
PORT=8989
NODE_ENV=development

APP_NAME=
APP_URL=http://${HOST}:${PORT}
CACHE_VIEWS=false
APP_KEY=my_app_key

DB_CONNECTION=pg
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=my_db_pass
DB_DATABASE=my_db_name

... other credential goes here ....

注意:my_db_pass 是我的 postgres 用户名的密码。我可以在命令行中使用此密码成功登录。

谁能帮我弄清楚出了什么问题?

【问题讨论】:

  • 不要将peer用于本地IPv4连接,在pg_hba.conf中使用md5
  • 我做到了。仍然无法将数据库与我的项目连接。

标签: postgresql adonis.js


【解决方案1】:

我刚刚改了这个

let client = new Client({
  user: process.env.USER,
  host: process.env.HOST,
  database: process.env.DATABASE,
  password: process.env.PASSWORD,
  port: process.env.DB_PORT,
});

到这里

let client = new Client({
  user: "postgres",
  host: process.env.HOST,
  database: process.env.DATABASE,
  password: "aaaaa",
  port: process.env.DB_PORT,
});

在服务器中,process.env.USER 不是我给定的用户名。 IDK 为什么,但值已更改。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。就我而言,我在密码中添加了特殊字符并转义它们。

    https://docs.adonisjs.com/guides/environment-variables#escape-the--sign

    【讨论】:

      【解决方案3】:

      进入 config/database.js
      找到 PostgreSQL 配置并像这样替换密码值

      password: "direct set your password",
      

      并尝试我在 Cpanel 托管中遇到同样的问题,我尝试这种方法它的工作

      【讨论】:

      • 你能分享你的环境文件和数据库配置吗?
      猜你喜欢
      • 2021-03-23
      • 2016-08-30
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      相关资源
      最近更新 更多