#node.js #mongodb #mongoose
#node.js #mongodb #mongoose
Вопрос:
Я использую версию сервера MongoDB: 4.0.6 и Mongoose версии 5.4.18. Я создал следующего пользователя MongoDB:
"_id" : "admin.matt",
"user" : "matt",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "user-data"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWrite",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
Я пытаюсь подключиться, используя следующую команду mongoose:
mongoose.connect('mongodb://matt:passwordexample!@localhost:27017/user-data', {useNewUrlParser: true});
Он отвечает MongoError: ошибка аутентификации.
Я перепробовал несколько форматов подключения, и ничего не сработало. Мои учетные данные пользователя настроены неправильно? Спасибо.
и это мой package.json. Нужен ли мне MongoDB здесь, если у меня есть mongoose?
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.4",
"express-handlebars": "^3.0.2",
"express-session": "^1.15.6",
"express-validator": "^5.3.1",
"forever": "^0.15.3",
"mongoose": "^5.4.18",
"nodemon": "^1.18.10",
"path": "^0.12.7"
},
Комментарии:
1. какую версию MongoDB вы используете?
2. @ykit9 Я использую сервер MongoDB версии 4.0.6. Я только что понял, что это не указано как зависимость, это проблема?
3. Измените параметры на
{ useNewUrlParser: true, authSource: "admin" }
и также попробуйтеauthSource: "user-data"
, чего бы это ни стоило. По умолчанию должно бытьadmin
, и похоже , что это то, что вы сделали, но попробуйте оба, чтобы быть уверенным. Вы также должны отметить, чтоreadWriteAnyDatabase
в основном переопределяет любую «меньшую» привилегию, которую вы назначили. Поэтому вы, вероятно, захотите отредактировать это из учетной записи, которую в конечном итоге использует ваше приложение.
Ответ №1:
Если имя пользователя или пароль содержат знак at @, двоеточие:, косую черту / или символ знака процента %, используйте кодировку процентов.
https://docs.mongodb.com/manual/reference/connection-string/#urioption.authSource
Или вы можете попробовать это,
db.createUser(
{
user: "matt",
pwd: "passwordexample!",
roles: [ { role: "root", db: "admin" } ]
}
)
Комментарии:
1. Мой пароль содержит только восклицательный знак, никаких других специальных символов. Неверны ли мои текущие учетные данные пользователя? Нужно ли мне правило ‘root’?
2. На самом деле вам нужно создать еще одного пользователя для базы данных пользовательских данных. Вот так
use user-data db.createUser( { user: "matt", pwd: "passwordexample!", roles:[{role: "userAdmin" , db:"user-data"}]})
3. правила «anydatabases» не делают этого для меня, в принципе? Я должен создать пользователя конкретно в user-data?
4. Теперь у меня есть пользователь с _id: «user-data.matt», и у этого пользователя есть роль: UserAdmin в базе данных «user-data», и я все еще получаю ошибку аутентификации.
Ответ №2:
Вы не указали authSource в строке подключения: mongodb://matt:passwordexample!@localhost:27017/user-data?authSource=admin
.
Комментарии:
1. боже, вот и все………. -_- спасибо!! почему это происходит: mongoosejs.com/docs/connections.html этого вообще не говорить?