未处理的拒绝 SequelizeConnectionError:用户“ankitj”的密码验证失败

Posted

技术标签:

【中文标题】未处理的拒绝 SequelizeConnectionError:用户“ankitj”的密码验证失败【英文标题】:Unhandled rejection SequelizeConnectionError: password authentication failed for user "ankitj" 【发布时间】:2019-05-12 05:16:48 【问题描述】:

即使 .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?很可能是您的环境变量未正确加载。 【参考方案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 的默认密码时遇到了同样的问题。尝试从命令行更改它,如下所示。

    psql \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'
);

【讨论】:

以上是关于未处理的拒绝 SequelizeConnectionError:用户“ankitj”的密码验证失败的主要内容,如果未能解决你的问题,请参考以下文章

可能未处理的承诺拒绝未定义不是一个函数

条纹元素抛出“未处理的承诺拒绝”

未处理的拒绝 SequelizeDatabaseError: 未选择数据库

处理快递申请中未处理的承诺拒绝

反应本机中未处理的承诺拒绝错误?

未处理的拒绝 SequelizeEagerLoadingError:未关联,并且无法读取未定义的属性“getTableName”