Dart - 尝试使用 mongodb 进行身份验证时出错

Posted

技术标签:

【中文标题】Dart - 尝试使用 mongodb 进行身份验证时出错【英文标题】:Dart - error when trying to authenticate with mongodb 【发布时间】:2015-12-25 02:13:16 【问题描述】:

运行后:

import 'package:mongo_dart/mongo_dart.dart';

//Create account with given credentials
createAccount(Map<String, String> credentials) async 

    Db db = new Db('mongodb://127.0.0.1/exampledb');
    await db.open();
    await db.authenticate("user", "password");

    //TODO: Post credentials into DB

我在 Dart 服务器上收到一条错误消息:

未处理的异常: 未捕获的错误:ok: 0.0, errmsg: auth failed, code: 18

mongod 服务器上出现了不同的错误:

2015-09-27T20:04:25.921+0100 I ACCESS [conn1] 无法使用 MONGODB-CR 机制验证 user@exampledb:AuthenticationFailed MONGODB-CR credentia 用户文档中缺少 ls

身份验证成功并允许我访问数据库的唯一时间是我使用命令提示符时。

例子:

$ use exampledb
$ db.auth("user", "password")

如何使用 authenticate 方法让我的 Dart 脚本访问我的本地 mongodb?

【问题讨论】:

如果您尝试使用错误的凭据进行身份验证,mongo_dar 通常会抛出这样的错误。当我在没有 sampledb 数据库的本地服务器上运行这样的脚本时,我遇到了和你一样的错误 在我在数据库 sampledb (在 mongo shell 中)中创建了具有此类密码的用户后,相同的脚本可以正常工作。顺便说一句,您的函数被命名为createAccount,并且有关于使用凭据创建帐户的评论。是不是搞错了? 我已经用 mongodb v.3 重现了这个错误。你使用 mongodb 3 吗? @VadimTsushko 是的,我正在使用 MongoDB 3.0。感谢您对此进行调查。期待您的回答。 【参考方案1】:

我在我的 mongodb 4.0.10 和 mongo_dart 0.3.6 中进行了尝试,并且身份验证一切正常且正确,如果您还没有更新您的组件,一切都会好起来的。

PS:我知道我迟到了,但希望有人能从我的“笔记”中习惯。

【讨论】:

【参考方案2】:

最新更新:

从 0.2.5 版开始,mongo_dart 支持 SCRAM-SHA-1 认证机制。它默认用于与 MongoDb 3 的连接

更新:

这似乎是一些驱动程序的普遍问题,程序等不支持 mongodb 3.0 的新身份验证机制 (SCRAM-SHA-1)

默认情况下,mongodb 3.0,在创建新用户时不要以旧格式 (MONGODB-CR) 创建凭据。

有一个迂回的解决方案,强制 mongodb 3.0 及更高版本在创建用户时使用MONGODB-CR 模式。 在https://jira.mongodb.org/browse/SERVER-17459 寻找示例解决方案 如该线程所述

新驱动程序和旧版软件都适用于该解决方案

显然,mongo_dart 的最佳解决方案是向驱动程序添加新身份验证模式的实现。不能给出任何日期,但我认为这应该是我有时间使用 mongo_dart 时可以考虑的第一个功能。

如果有人用拉取请求击败我,那显然会很棒:)

原答案

我也在我的环境中重现了该错误。

错误似乎与 MongoDb 3.0 版中更改的默认身份验证模式有关。当问题解决时,我会更新这个答案

【讨论】:

感谢您的回答,这对您有很大帮助!是的,目前的解决方案显然并不理想,但现在必须这样做。如果在 mongo_dart 中实施新的身份验证后更新此答案,那就太好了。

以上是关于Dart - 尝试使用 mongodb 进行身份验证时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用mongo_dart连接到MongoDB Atlas

使用 Spring Boot 对 mongoDB 进行身份验证失败

Kubernetes liveness 探针是不是支持使用 PKI 进行用户身份验证?

如何使用分离的后端和前端(Passport / Express / React)进行社交身份验证

在 Docker 上使用 MongoDB 进行 Spring Boot

.使用 Mongodb 进行 Net Core Web Api 身份验证