【问题标题】:Mongoose Auth Error: command find requires authentication. But I didMongoose 身份验证错误:命令查找需要身份验证。但我做到了
【发布时间】:2019-09-02 16:56:42
【问题描述】:

我正在尝试查找我知道存在的文档,因为我可以在管理控制台中看到它,这要归功于 mongo-express... 但是当我使用 Model.findOne( 时,它会吐出以下错误消息。我究竟做错了什么? (主机名 'mongo' 是我的 docker 容器,它连接得很好,我可以在日志中看到它)

这是我的代码:

// This all works because the following events show success, and no error.
// So I know it's authing correctly on initial connection
-dbConnect.js-
"user strict"

import mongoose from "mongoose"

const connection = mongoose.createConnection( 
"mongodb://mongo:27017/dbName?authSource=admin", {
              useNewUrlParser: true,
              user: process.env.user,
              pass: process.env.pass,
              keepAlive: true,
            })
connection.on( "connected", () => {
  console.log( "MONGOOSE: connected" )  
})

connection.on( "close", () => {
  console.log( "MONGOOSE: connection close" )  
})

connection.on( "error", error => {
  console.log( "MONGOOSE: connection error", error )  
})

export default connection

-

-models/auth.js-
"use strict"

import mongoose from "mongoose"
import connection from "../dbConnect"

const xSchema = new mongoose.Schema(
  {
    id    : String,
    user  : String,
    pass  : String
  },
  { collection: "x" }
)
export const X = connection.model( "X", xSchema )

-

-controllers/auth.js-
import { X } from "../models/auth"
//Promise wrapper
X.findOne( { id: incommingId }, ( error, x ) => {
  //handler
})

我最终得到了这个错误

MongoError: command find requires authentication
    at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:443:61)
    at Connection.emit (events.js:189:13)
    at Connection.EventEmitter.emit (domain.js:441:20)
    at processMessage (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:364:10)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:533:15)
    at Socket.emit (events.js:189:13)
    at Socket.EventEmitter.emit (domain.js:441:20)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

【问题讨论】:

  • 不,我不能只是将连接字符串更改为mongodb://${process.env.user}:${process.env.pass}@mongo:27017/dailymeals?authSource=admin,然后它甚至最初都无法连接。

标签: node.js mongodb authentication mongoose


【解决方案1】:

答案简单而愚蠢。上面的一切都是正确的......留下未定义的环境变量。

显然 mongo 可以让您在未经授权的情况下进行连接,您无能为力。正确填充这些环境变量,一切都完美地移动了。

【讨论】:

  • 是的,但是我使用的是 docker 容器,所以对你来说可能会有所不同......你应该考虑为你的环境设置 env vars。这取决于您的环境,但大多数 linux 环境您可以在命令行或 ~/.bashrc 文件中使用以下设置:export user='someUserName' &amp;&amp; export pass='someUserPass'
猜你喜欢
  • 2020-11-26
  • 2022-01-10
  • 2019-07-20
  • 2021-04-10
  • 2012-12-12
  • 2015-11-13
  • 2022-10-16
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多