Могу ли я обновлять документ пользователя каждый раз, когда пользователь обновляет свой профиль аутентификации? - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю с флаттером, и у меня есть провайдер аутентификации. Всякий раз, когда мой пользователь входит в систему с помощью своего телефона, я также обновляю его профиль. Но моя проблема в том, что к авторизованным пользователям нельзя обращаться. Поэтому я прочитал, что я должен хранить отдельную коллекцию пользователей. Теперь мой вопрос: возможно ли обновить пользовательский документ в моей коллекции пользователей, когда пользователь обновляет свой профиль авторизации? Я хотел бы сделать это с облачными функциями, но я заметил, что есть только создание и удаление? Так как я могу это сделать?

Это то, что у меня сейчас есть

Поставщик аутентификации

  Future<void> _verificationComplete(BuildContext context, AuthCredential authCredential, userInfo.UserInfo userInfo) async {

    AuthResult authResult = await FirebaseAuth.instance.signInWithCredential(authCredential);
    final userUpdateInfo = UserUpdateInfo();
    userUpdateInfo.displayName = userInfo.name;
    userUpdateInfo.photoUrl = userInfo.photoUrl;
    await authResult.user.updateProfile(userUpdateInfo);
    await authResult.user.reload();
    user = UserModel.fromFirebase(authResult.user);
    _status = AuthenticationStatus.authenticated;
    notifyListeners();
  }

Облачная функция

export const onUserCreated = functions.region('europe-west1').auth.user().onCreate(async user => {

    const privateUserData = {
        activeGroup: '',
        cloudMessagingToken: '',
    }

    const publicUserData = {
        name: '',
        photoUrl: '',
    }

    const promises = [];
    promises.push(firestore.collection('users').doc(user.uid).collection('private').doc('data').set(privateUserData));
    promises.push(firestore.collection('users').doc(user.uid).collection('public').doc('data').set(publicUserData));
    return await Promise.all(promises);
});

1 Ответ

1 голос
/ 15 апреля 2020

Нет триггера облачных функций, когда пользователь обновляет свой профиль аутентификации Firebase. Я бы настоятельно рекомендовал подать запрос функции для этого, так как его очень не хватало.

На данный момент самое близкое, что вы можете получить, - это облачная функция, которую вы вызываете непосредственно из кода приложения. , Существует два варианта:

  1. Пусть код вашего приложения сначала вызовет API-интерфейс аутентификации Firebase, а затем, когда он завершится, вызовет вашу пользовательскую облачную функцию для обновления базы данных.

  2. Пусть код вашего приложения немедленно вызывает функцию Cloud, а затем функция Cloud обновляет как профиль пользователя , так и базу данных.

Я как-то часто делаю первый, но вижу, что другие разработчики выбирают второй подход. Я думаю, что их подход, вероятно, проще, но я просто еще не дошел до него. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...