未处理的拒绝 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”