猫鼬连接身份验证失败

Tic*_*hel 6 mongoose mongodb node.js

在此帮助下,我在mongo shell中创建了一个超级用户:在mongo中创建超级用户

user: "try1"
passw: "hello"
Run Code Online (Sandbox Code Playgroud)

在mongo cmd中,我有3个数据库:“ admin”,“ myDatabase”和“ local”。

现在,我尝试使用此授权连接到名为“ myDatabase”的数据库。

mongoose.connect('mongodb://try1:hello@localhost:27017/myDatabase');
Run Code Online (Sandbox Code Playgroud)

但这是我得到的错误:

名称:“ MongoError”,
消息:“身份验证失败。”,
确定:0,
errmsg:“身份验证失败。”,
代码:18,代码
名:“ AuthenticationFailed”}
猫鼬断开了
Mongoose通过$ {msg}断开了连接

小智 24

这是现在的正确答案。其他人并不完全正确。

await mongoose.connect("mongodb://localhost:27017/db", {
    poolSize: 10,
    authSource: "admin",
    user: "admin",
    pass: "password",
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false 
});
Run Code Online (Sandbox Code Playgroud)

  • `authSource admin` 成功了,这是我的简短版本 `await mongoose.connect("mongodb://root:example@localhost:27017/example-db?authSource=admin");` 谢谢 (10认同)

小智 16

句法:

await mongoose.connect('mongodb://username:password@host:port/database?authSource=admin');
Run Code Online (Sandbox Code Playgroud)

例子:

await mongoose.connect('mongodb://myUser:myPassword@localhost:27017/myDataBase?authSource=admin');
Run Code Online (Sandbox Code Playgroud)

  • 这有效。我只是添加了 ?authSource=admin 并且它起作用了。 (2认同)

Tem*_*ary 8

除了@kartGIS,我还添加了另一个选项来使连接代码尽可能完美。

mongoose.connect("mongodb://localhost:27017/databaseName", {
    "auth": { "authSource": "admin" },
    "user": "username",
    "pass": "password",
    "useMongoClient": true
});
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下这个选项 "auth": { "authSource": "admin" }, 是什么吗? (2认同)
  • `"auth": { "authSource": "admin" }` 表示将 `authenticationDatabase` 设置为 `admin`。 (2认同)

小智 7

许多小时前,我遇到了同样的问题,毕竟我已经解决了。我的代码是:

 mongoose.createConnection("mongodb://localhost:27017/dbName",{"auth":
 {"authSource": "admin"},
"user": "admin",
"pass": "password"});
Run Code Online (Sandbox Code Playgroud)

  • 为什么猫鼬文档这么难!?我尝试了这些的许多变体,但只是没有尝试这个。终于你救了我的一天。谢谢@kartGIS (2认同)

dan*_*nto 5

我有同样的问题,它通过删除'authSource'参数来解决

/* Not working */
mongoose.connect("mongodb://localhost:27017/test", {
    "auth": { "authSource": "admin" },
    "user": "admin",
    "pass": "admin123",
    "useMongoClient": true
});

/* Working */
mongoose.connect("mongodb://localhost:27017/test", {
    "user": "admin",
    "pass": "admin123",
    "useMongoClient": true
});
Run Code Online (Sandbox Code Playgroud)

在Mongoose-v5.0.0上测试。


M. *_*put 5

在 Mongodb 4.2 和 Mongoose 5.7.13 上对我来说工作正常

节点.js

const Connect = async () => {

    let url = "mongodb://localhost:27017/test_db";

    try {

        let client = await Mongoose.connect( url, {
            poolSize: 10,
            authSource: "admin",
            user: "root",
            pass: "root123", 
            useCreateIndex: true,
            useNewUrlParser: true,
            useUnifiedTopology: true
        } );

        log( "Database is connected!" );
    } catch ( error ) {
        log( error.stack );
        process.exit( 1 );
    }

}
Connect();
Run Code Online (Sandbox Code Playgroud)

/etc/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 0.0.0.0 

setParameter:
   enableLocalhostAuthBypass: false

security:
  authorization: enabled
Run Code Online (Sandbox Code Playgroud)

数据库用户

use admin;
db.createUser(
  {
    user: "root",
    pwd: "root123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

show users;
{
   _id": "admin.root",
   "userId": UUID( "5db3aafd-b1fd-4bea-925e-8a4bfb709f22" ),
   "user": "root",
   "db": "admin",
   "roles": [ {
        "role": "userAdminAnyDatabase",
        "db": "admin"
      },
      {
        "role": "readWriteAnyDatabase",
        "db": "admin"
      }
   ],
   "mechanisms": [
       "SCRAM-SHA-1",
       "SCRAM-SHA-256"
   ]
}
Run Code Online (Sandbox Code Playgroud)


小智 3

这是猫鼬 6.7.0 的答案!用于 NUXT 3

.env 部分

MONGO_URI = "mongodb://localhost:27017/MyBeautifulDB"
MONGO_USERNAME = "mongoadmin"
MONGO_PASSWORD = "mystrongpassword"
Run Code Online (Sandbox Code Playgroud)

数据库连接部分

import mongoose from 'mongoose';

export default async (_nitroApp) => {
const config = useRuntimeConfig();

mongoose.connect(config.MONGO_URI, {
        maxPoolSize: 10,
        authSource: "admin",
        user: config.MONGO_USERNAME,
        pass: config.MONGO_PASSWORD
    })
    .then(() => console.log('Connected to DB'))
    .catch((e) => console.log(e));
}
Run Code Online (Sandbox Code Playgroud)

nuxt.config.ts - 将数据库连接文件注册到配置。

export default defineNuxtConfig({
    runtimeConfig: {
        MONGO_URI: process.env.MONGO_URI,
    },

    nitro: {
        plugins: ['@/server/db/index.ts']
    }
})
Run Code Online (Sandbox Code Playgroud)