В течение последних двух дней, когда я вхожу как зарегистрированный пользователь в mon go, прошиваем и запускаю операцию вставки в коллекцию, в которой написано "(NO_MATCHING_RULE_FOUND): NoMatchingRuleFound: com.mongodb.stitch.core.StitchServiceException: вставить не разрешено ", хотя у меня правильно заданы правила этой c коллекции.
Вот часть инициализации моего класса DbHelper
public class DbHelperClass {
RemoteMongoClient mongoClient;
StitchUser currUser;
public DbHelperClass() {
try {
// test for development
UserPasswordCredential credential = new UserPasswordCredential("*****", "*****");
StitchAppClient client = Stitch.initializeDefaultAppClient("******");
client.getAuth().loginWithCredential(credential);
System.out.println(client.getAuth().getUser().getId());
currUser = client.getAuth().getUser();
mongoClient = client.getServiceClient(RemoteMongoClient.factory, "*****");
} catch (Exception e) {
e.printStackTrace();
}
}
И я знаю, что мой пользователь вошел в систему потому что я печатаю ID пользователя, чтобы проверить также
Я не хочу помещать в огромный журнал для инициатора эмулятора, но я заметил одну вещь - утверждение в этом журнале
[initandlisten ] Коллекция сессий не настроена; ожидание до следующего сеанса refre sh интервал: поле expireAfterSeconds недопустимо для спецификации индекса. Спецификация: {ключ: {lastUse: 1}, имя: «lsidTTLIndex», expireAfterSeconds: 1800} 2020-03-27 02: 23: 19.827 10089-10089 / com.zach.gamemessageapp I / capi: CONTROL [initandlisten] Коллекция сессий не настроен; ожидание следующего интервала пожинания: config.system.sessions не существует
Я не уверен, что это проблема, но она выглядела неправильно
В самом конце этой инициализации я вызываю другую операцию поиска для извлечения членов из БД, но он говорит, что мне нужно аутентифицировать, ЧТО Я УЖЕ СДЕЛАЛ.
Когда я запускаю операцию вставки, о которой я упоминал в начале, logcat печатает
2020-03-27 02: 27: 43.118 10089-10089 / com.zach.gamemessageapp E / app: не удалось вставить документ с: (NO_MATCHING_RULE_FOUND): NoMatchingRuleFound: com.mongodb.stitch.core.StitchServiceException: вставка не разрешена в com.mongodb.stitch.core.internal.common.StitchError.handleRichError (StitchError. java: 94) в com.mongodb.stitch.core.internal.common.StitchError.handleRequestError (StitchError. java : 61) на com.mongodb.stitch.core.internal. net .StitchRequestClient.inspectResponse (StitchRequestClient. java: 49) на com.mongodb.stitch.core.internal. net .Stitch RequestClient.doRequest (StitchRequestClient. java: 67) на com.mongodb.stitch.core.auth.internal.CoreStitchAuth.doAuthenticatedRequest (CoreStitchAuth. java: 157) на com.mongodb.stitch.core.auth.internal. CoreStitchAuth.doAuthenticatedRequest (CoreStitchAuth. java: 172) на com.mongodb.stitch.core.services.internal.CoreStitchServiceClientImpl.callFunction (CoreStitchServiceClientImpl. java: 113) на com.mongodb.services. remote.internal.InsertOneOperation.execute (InsertOneOperation. java: 44) на com.mongodb.stitch.core.
это моя операция вставки
public void writeHelper(String msg) {
/* must be eventually configured to send messages from specific users to specific chatroom */
Document doc = new Document("message", msg);
try {
RemoteMongoCollection<Document> col = mongoClient.getDatabase("GmessageApp2").getCollection("ChatMessages");
final Task<RemoteInsertOneResult> insertTask = col.insertOne(doc);
insertTask.addOnCompleteListener(new OnCompleteListener<RemoteInsertOneResult>() {
@Override
public void onComplete(@NonNull Task<RemoteInsertOneResult> task) {
if (task.isSuccessful()) {
Log.d("app", String.format("successfully inserted item with id %s",
task.getResult().getInsertedId()));
} else {
Log.e("app", "failed to insert document with: ", task.getException());
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
и здесь это операция поиска, которую я использую, чтобы получить членов
public void getChatMembers(String chatId, ExistsCallBack eb) {
RemoteMongoCollection<Document> col = mongoClient.getDatabase("GmessageApp2").getCollection("Chat");
Task<Document> chatData = col.find(Filters.eq("_id", new ObjectId(chatId))).first();
chatData.addOnCompleteListener(new OnCompleteListener<Document>() {
@Override
public void onComplete(@NonNull Task<Document> task) {
if(chatData.isSuccessful()){
Document result = chatData.getResult();
eb.onExists(result);
}
else{
Log.d("app","Failed to get members: "+chatData.getException());
}
}
});
}
Я действительно не знаю, что делаю неправильно. У меня есть разрешение, разрешенное в mon go stitch, и оно дает мне эту аутентификацию и не соответствует правилу ошибки.
наконец, вот скриншот моих правил на mongodb для операции вставки