Работа с пользователями с помощью приложения 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);
Другие вопросы по тегам