Работа с пользователями с помощью приложения MongoDB Stitch в кластере Atlas
У меня есть приложение MongoDB Stitch, которое использует аутентификацию по электронной почте / паролю. Это создает пользователей в приложении Stitch, которые я могу аутентифицировать на странице. У меня также есть MongoDB Atlas Cluster для моей базы данных. В кластере у меня есть БД с именем проекта, а затем коллекция под "Matches". Поэтому, когда я вставляю "Совпадения" в коллекцию, я могу отправить аутентифицированный идентификатор пользователя из Stitch, чтобы у меня был способ запрашивать все совпадения для конкретного пользователя. Но как я могу добавить дополнительные значения в коллекцию 'User' в stitch? Этот пользовательский раздел как бы предварительно упакован в Stitch с любым типом аутентификации, который вы выберете (электронная почта / пароль). Но для моего приложения я хочу иметь возможность хранить что-то вроде поля "MatchesWon" или "GamePreference" в коллекции "User".
Должен ли я создать коллекцию для 'Users' так же, как я сделал для 'Matches' в своем кластере, и просто вставить идентификатор пользователя, предоставленный из Stitch, и обработать поля в этой коллекции? Похоже, я бы дублировал данные пользователя, но я не уверен, что понимаю другой способ сделать это. Все еще учусь, я ценю любые отзывы / советы.
2 ответа
В настоящее время нет способа хранить ваши собственные данные на внутренних пользовательских объектах. Вместо этого вы можете использовать триггеры аутентификации для управления пользователями. Следующий фрагмент взят из этих документов.
exports = function(authEvent){
// Only run if this event is for a newly created user.
if (authEvent.operationType !== "CREATE") { return }
// Get the internal `user` document
const { user } = authEvent;
const users = context.services.get("mongodb-atlas")
.db("myApplication")
.collection("users");
const isLinkedUser = user.identities.length > 1;
if (isLinkedUser) {
const { identities } = user;
return users.updateOne(
{ id: user.id },
{ $set: { identities } }
)
} else {
return users.insertOne({ _id: user.id, ...user })
.catch(console.error)
}
};
MongoDB внедряет инновации очень быстрыми темпами - и хотя в 2019 году не было возможности сделать это элегантно, теперь он есть. Теперь вы можете включить настраиваемые пользовательские данные в области MongoDB! (https://docs.mongodb.com/realm/users/enable-custom-user-data/)
https://docs.mongodb.com/realm/sdk/node/advanced/access-custom-user-data
const user = context.user;
user.custom_data.primaryLanguage == "English";
-
{
id: '5f1f216e82df4a7979f9da93',
type: 'normal',
custom_data: {
_id: '5f20d083a37057d55edbdd57',
userID: '5f1f216e82df4a7979f9da93',
primaryLanguage: 'English',
},
data: { email: 'test@test.com' },
identities: [
{ id: '5f1f216e82df4a7979f9da90', provider_type: 'local-userpass' }
]
}
-
const customUserData = await user.refreshCustomData()
console.log(customUserData);