【问题标题】:Mongodb stopped working after authorizationmongodb授权后停止工作
【发布时间】:2021-07-01 17:20:10
【问题描述】:

我使用时一切正常: mongodb://0.0.0.0:27017/data。 添加数据库身份验证后:mongodb://user:pwd@0.0.0.0:27017/?authSource=data 停止工作。

在此之前我填写数据库data 并创建了一个新用户:

use data
db.createUser(
  {
    user: "user",
    pwd: "pwd",
    roles: [
       { role: "dbAdmin", db: "data" },
    ]
  }
)
db.grantRolesToUser(
   "user",
   [ "readWrite" , { role: "read", db: "data" } ],
   { w: "majority" , wtimeout: 4000 }
)

我更改了mongod.cfg 文件:

security:
  authorization: enabled

但是不管怎样还是不行,后端连接到数据库但是请求是空的,好像后端无法访问数据库中的数据。

后端的server.js:

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const app = express();
const db = "mongodb://user:pwd@0.0.0.0:27017/?authSource=data";
const PORT = 3000;
const api = require('./routes/api');

app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json())
app.use('/api', api);

mongoose
    .connect(db, {
        useFindAndModify: false,
        useUnifiedTopology: true,
        useNewUrlParser: true,
    })
    .then(() => console.log('Connected to mongodb!'))
    .catch(err => {
        console.log(Error, err.message);
    });

app.listen(PORT, function () {
    console.log('Server running on localhost:' + PORT);
});

【问题讨论】:

  • 您是否可以使用新用户/密码从mongo shell 或 Compass 等任何工具查询相同的数据?
  • " 后端连接数据库但请求为空" - 你的请求路由代码是什么?
  • 您的 NodeJS 后端应用程序是否连接到数据库?你看到console.logged:'Connected to mongodb!'
  • db.grantRolesToUsermethod 参数 - 你能验证它们是否正确吗?
  • 您在创建用户后是否通过授权重新启动了mongod 实例(我看到您已更改配置文件)?

标签: node.js database mongodb authentication mongoose


【解决方案1】:

我解决了我的问题。原因是连接字符串中的authSource

之前:

 "connectionString": "mongodb://user:pwd@0.0.0.0:27017/?authSource=data"

之后:

 "connectionString": "mongodb://user:pwd@0.0.0.0:27017/data"

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-09-01
    • 2016-06-14
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多