【问题标题】:Unhandled rejection SequelizeConnectionError: password authentication failed for user "ankitj"未处理的拒绝 SequelizeConnectionError:用户“ankitj”的密码验证失败
【发布时间】:2023-04-06 02:55:01
【问题描述】:

即使 .env 文件中指定的 DB 用户不同,也会发生这种情况。作为记录,“ankitj”也是我系统的用户名。我不明白为什么会这样。

这是错误:

Unhandled rejection SequelizeConnectionError: password authentication failed for user "ankitj"
    at connection.connect.err (/home/ankitj/Desktop/skillbee/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:128:24)
    at Connection.connectingErrorHandler (/home/ankitj/Desktop/skillbee/node_modules/pg/lib/client.js:140:14)
    at Connection.emit (events.js:160:13)
    at Socket.<anonymous> (/home/ankitj/Desktop/skillbee/node_modules/pg/lib/connection.js:124:12)
    at Socket.emit (events.js:160:13)
    at addChunk (_stream_readable.js:269:12)
    at readableAddChunk (_stream_readable.js:256:11)
    at Socket.Readable.push (_stream_readable.js:213:10)
    at TCP.onread (net.js:599:20)

【问题讨论】:

  • 欢迎来到 SO ;) 请在how to ask a good question 阅读这篇文章。这将包括对您要实现的目标的正确描述、您的代码(或相关的 sn-ps)以及显示您迄今为止尝试过的内容和可能的错误消息的努力。还建议提供完整的MCVE..
  • 您是否安装并配置了 dotenv?很可能是您的环境变量未正确加载。

标签: node.js postgresql sequelize.js


【解决方案1】:

我假设您在使用带有 Node.js 的 Sequelize 时遇到此错误。当我遇到以下错误时,我遇到了同样的错误:

const sequelize = new Sequelize(
  process.env.DATABASE,
  process.env.DATABASE_USER,
  process.env.DATABASE_PASSWORD,
  {
    dialect: 'postgres',
  }
)

我能够通过将其替换为 a connection ur 来解决此问题:

const sequelize = new Sequelize("postgres://postgres:postgres@localhost/gql", {
  dialect: 'postgres'
  // anything else you want to pass
})

其中gql 是我的.env 文件中DATABASE 的名称。

用户“ankitj”执行命令以运行 Node 脚本,因此该脚本正在尝试以该用户身份连接。我首先尝试在 Postgres 端通过添加用户并授予权限来解决此问题,但无法使其正常工作——我有兴趣看到该解决方案——但指定连接 url 对我有用。

【讨论】:

  • 它在我的情况下不起作用。但是,将 env 变量用引号括起来对我来说是诀窍。无论如何,谢谢。
  • 这在我的情况下有效。问题可能与第一种情况下未提及服务器名称(localhost)有关。
【解决方案2】:

我在使用 PostgreSQL 的默认密码时遇到了同样的问题。尝试从命令行更改它,如下所示。

  1. psql
  2. \password

然后输入一个新密码并更新您的.env 文件,这应该可以工作。

【讨论】:

    【解决方案3】:

    我没有使用 process.env 变量,而是使用了实际名称,但用引号 (" ") 括起来,这样就可以了。

    【讨论】:

    • 这意味着您的问题与 Sequelize 无关,是由于您滥用 process.env
    【解决方案4】:

    我在连接 NodeJS 和 Postgres SQL 时遇到了同样的问题。我找到了解决方案。我们需要检查db.config.js文件(数据库配置文件)和index.js(你调用的const sequelize = new Sequelize(.......)属性名称是否匹配。

    // db.config.js
    module.exports = {
        user: '******',
        host: 'localhost',
        database: '***********',
        password: '***',
        port: 5432,
        dialect: "postgres", // we need to implement 
        pool: {
            max: 5,
            min: 0,
            acquire: 30000,
            idle: 10000
        }
    };
    
    const Sequelize = require("sequelize");
    const dbConfig = require("../config/db.config.js");
    
    const sequelize = new Sequelize(dbConfig.database, dbConfig.user, dbConfig.password, {
        host: dbConfig.host,
        dialect: dbConfig.dialect,
        operatorsAliases: false,
    
        pool: {
            max: dbConfig.pool.max,
            min: dbConfig.pool.min,
            acquire: dbConfig.pool.acquire,
            idle: dbConfig.pool.idle
        },
    })
    

    上面提到的 params 行是 (dbConfig.database, dbConfig.user, dbConfig.password) 我们需要检查 db. config.js 文件

    注意:请在db.config.js文件中添加方言属性。

    现在问题解决了...谢谢

    Console verbiage log

    【讨论】:

      【解决方案5】:

      我也有同样的错误,但我通过使用模板字符串解决了它

      const sequelize = new Sequelize(`${process.env.DB_NAME}`, `${process.env.DB_USER}`, `${process.env.DB_PASSWORD}`, {
        host: process.env.DB_HOST,
        dialect: 'postgres'
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 2018-06-24
        • 2020-01-18
        • 2019-02-24
        • 2011-12-03
        • 1970-01-01
        相关资源
        最近更新 更多