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

Dart - error when trying to authenticate with mongodb

运行之后:

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 服务器上收到一条错误消息:

Unhandled exception: Uncaught Error: {ok: 0.0, errmsg: auth failed, code: 18}

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

2015-09-27T20:04:25.921+0100 I ACCESS [conn1] Failed to authenticate user@exampledb with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentia ls missing in the user document

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

示例:

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

如何使用身份验证方法让我的 Dart 脚本获得对本地 mongodb 的访问权限?

最新更新:

自版本 0.2.5 mongo_dart 支持 SCRAM-SHA-1 身份验证机制。它默认用于 MongoDb 3

的连接

更新:

这似乎是一些驱动程序相当普遍的问题,程序 e.t.c 还不支持 mongodb 3.0

的新身份验证机制 (SCRAM-SHA-1)

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

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

both new drivers and legacy software work with that solution

显然 mongo_dart 的最佳解决方案是向驱动程序添加新身份验证模式的实现。不能给出任何日期,但我认为这应该是我在 mongo_dart.

有时间时可以考虑的第一个功能

显然,如果有人通过拉取请求击败我,那就太好了:)

原回答

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

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

我在我的 mongodb 4.0.10 和 mongo_dart 0.3.6 中尝试过,身份验证一切正常,如果你还没有更新你的组件,一切都会好起来的.

PS:我知道我迟到了,但希望有人能习惯我的"Note"。