Knex-错误:用户“ Joshua Rieth”的密码身份验证失败

时间:2020-08-04 00:47:04

标签: windows postgresql npm knex.js pg

我正在使用Knex构建PostgreSQL数据库,并且在运行knex migrate:latest时始终出现此错误。

error: password authentication failed for user "Joshua Rieth"
    at Parser.parseErrorMessage (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:278:15)
    at Parser.handlePacket (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:126:29)
    at Parser.parse (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\parser.js:39:38)
    at Socket.<anonymous> (C:\Users\Joshua Rieth\Documents\Projects\Lambda\Labs\homerun-be\node_modules\pg-protocol\dist\index.js:8:42)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
    at Socket.Readable.push (_stream_readable.js:212:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)

我假设这与我的用户名有关,但是它应该是设置PostgreSQL时使用的默认postges用户。我还应该提到用户名和密码在.env文件中。

规格

  • PostgreSQL 12
  • Windows 10
  • NPM 6.14.6
  • pg 8.3.0
  • knex 0.20.15

1 个答案:

答案 0 :(得分:1)

设置knex时,除非您想以“当前OS用户”身份连接,否则需要提供用户名/密码。您可以在多个地方设置凭据,因此,如果可以全部检查(并通知我们:)),那将是很好的选择。

一种方法是:

require('knex')({
  client: 'pg',
  connection: 'postgres://username:password@localhost:5432/dbname'
})

或者,您可以设置环境变量PGUSER和PGPASSWORD,Knex连接也会选择这些变量。

您的connection也可以配置完整的详细信息,而不是链接:

var knex = require('knex')({
  client: 'pg',
  version: '12.0',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

要从实际代码中排除用户名/密码,我强烈建议您使用类似dotenv的软件包:https://www.npmjs.com/package/dotenv

(注意:以下与您的特定错误无关,因为您的用户名未正确指定)我要在Pg端检查的另一件事是您已在pg_hba.conf中启用了密码验证。 md5方法允许基于密码哈希的身份验证,这应该对您有好处。它应该看起来像这样:

# TYPE  DATABASE    USER    CIDR-ADDRESS          METHOD
host    all         all     123.123.123.123/32    md5