gpt4 book ai didi

c# - 在 Mongo .NET 2.0 驱动程序中捕获 MongoAuthenticationException

转载 作者:IT老高 更新时间:2023-10-28 13:23:23 25 4
gpt4 key购买 nike

我正在做基于 .NET 2.0 驱动程序的 MongoDB 项目,其中涉及对 MongoDB 的身份验证。有一个我正在做的示例代码:

public static bool createConneciton(string login, SecureString pass, string authDB) {
var settings = new MongoClientSettings {
Credentials = new[] {
MongoCredential.CreateCredential(authDB, login, pass)
},
Server = new MongoServerAddress("my.mongodb.server", 27017)
};
mongoClient = new MongoClient(settings);
return true;
}

if (Mongo.createConneciton(textBoxUsername.Text, pass, textBoxAuthDatabase.Text))
Task<BsonDocument> results = Mongo.getNodeStats();

public static async Task<BsonDocument> getNodeStats() {
try {
var db = Mongo.mongoClient.GetDatabase("admin");
var command = new BsonDocument {
{"serverStatus",1}
};
BsonDocument result = await db.RunCommandAsync<BsonDocument>(command).ConfigureAwait(false);
return result;
}
catch (Exception ex)
{
Logging.Log(ex);
return null;
}
}

到目前为止我遇到的主要问题是处理用户的凭据。因为所有操作都是惰性的,并且连接仅在执行 getNodeStats() 方法时打开。因此,如果用户输入了错误的凭据,他将等待 30 秒,因为只有 System.Timeout 异常而不是 MongoDB.AuthenticationException 甚至 MongoDB.ConnectionException 方法。如果您查看异常文本,很明显两者都上升但没有被捕获。

"MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1

我的第一个想法是在用户键入凭据并点击连接按钮后立即强制打开连接以检查凭据,而不是等待执行任何命令,但显然 MongoClient 类不再具有 .Open() 方法。因此,如果似乎不可能,我至少想在不需要等待超时的情况下捕获 AuthenticationException,但是我不知道应该在哪里 try catch 它。

最佳答案

您无法使用 MongoCredential.CreateCredential 连接 mongodb。您必须使用 MongoCredential.CreateMongoCRCredential 方法连接数据库。因为以前的凭证使用 SCRAM-SHA-1 机制连接 db,在 .NET 中会失败。而原因我还没有说清楚。

使用 MongoCredential.CreateMongoCRCredential,您可以更改 mongodb 中的 "authSchema" 设置。您可以引用MongoDB-CR Authentication failed

关于c# - 在 Mongo .NET 2.0 驱动程序中捕获 MongoAuthenticationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com