【发布时间】:2022-02-16 19:40:29
【问题描述】:
我有一个连接到 MongoDB 的 Web 应用程序。在我在 mongodb 中创建管理员用户之前一切正常:
db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
}
);
API 在.env 文件中写入的 URL
- 之前:
mongodb://localhost:27017/shrimp - 之后:
mongodb://admin:password@localhost:27017/shrimp
我绑定了添加其他用户,还是不行
- 网址:mongodb://user:newpassword@localhost:27017/shrimp
奇怪的是,当我在
mongoDB Compass,它可以连接,但是当我使用mongodb://user:newpassword@localhost:27017/shrimp时它说“身份验证失败。”
编辑
我使用的工具:mongoose、Windows 10、NextJS。
mongodb://user:newpassword@localhost:27017/shrimp 现在可以连接到 mongoDB Compass:mongodb://user2:1234@localhost:27017/shrimp?authSource=shrimp
我尝试对 dbconnection.js 使用相同的代码:
const URL ="mongodb://user2:1234@localhost:27017/shrimp?authSource=shrimp"
回答
简答:加?authSource=shrimp
长答案:
- 创建管理员用户后,检查
mongod.cfg文件。 How to set authorization in mongodb config file? - 登录mongo查看是否成功
mongo --host localhost --port 27017 -u admin -p --authenticationDatabase admin - 测试mongo URL格式能否登录MongoDB Compass
mongodb://admin:password@localhost:27017/admin?authSource=admin
如果可以登录 MongoDB Compass,链接应该在 JS 文件中有效
结果代码
const mongoose = require("mongoose")
const URL ="mongodb://admin:password@localhost:27017/admin?authSource=admin"
const connection = {};
async function dbConnect() {
if (connection.isConnected) return;
const db = await mongoose.connect(URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
connection.isConnected = db.connections[0].readyState;
console.log(connection.isConnected)
}
module.exports = dbConnect;
【问题讨论】: