Hello,
I’m using a custom authentication function so that a mobile client generates a unique id and logs in with it.
My function is
exports = async function(loginPayload) {
const app_secret = "somesecret"
const users = context.services
.get("mongodb-atlas")
.db("app")
.collection("UserInfo");
const { clientUserId, secret } = loginPayload;
if(app_secret !== secret) {
throw "Secret mismatch : " + secret;
}
const user = await users.findOne({ clientUserId: clientUserId });
if (user) {
return user._id.toString();
} else {
const newId = new BSON.ObjectId();
const partition = "user=" + newId.toString();
const result = await users.insertOne({ _id: newId, _partition: partition, clientUserId: clientUserId, creationDate: new Date() });
return result.insertedId.toString();
}
};
My problem is that the “realm user id”, the one that RealmSDK gives me on mobile client is different from the one I generate in the custom function.
And I have set the permissions to
READ
(can only read PUBLIC and your own data such as partitions are "user=myId123" or "PUBLIC")
{
"$or": [
{
"%%partition": "user=%%user.id"
},
{
"%%partition": "PUBLIC"
}
]
}
WRITE
(can only write your own data such as partitions are "user=myId123")
{
"%%partition": "user=%%user.id"
}
How am I supposed to retrieve this realm user id so that I can set up correctly my custom login function and populate correctly my collection with the right _partition and _id?
EDIT: The error I get from Realm Sync Backend is
Error: user does not have permission to sync on partition (ProtocolErrorCode=206)
Partition: user=607ac1b7687c4dca433c3c5e
Because my custom function has set the custom user id to 607ac1b7687c4dca433c3c5b
but the actual realm user id is 607ac1b7687c4dca433c3c5e
and I have no clue how to fetch this id from the custom login function…