每当用户更新身份验证配置文件时,我是否可以更新用户文档?

时间:2020-04-15 12:19:56

标签: flutter dart google-cloud-firestore google-cloud-functions

我正在使用Flutter,并且有一个AuthenticationProvider。每当我的用户使用他的手机登录时,我也会更新他的个人资料。但是我的问题是无法查询auth用户。因此,我读到我应该保留一个单独的用户集合。现在我的问题是,每当用户更新其身份验证配置文件时,是否可以更新用户集合中的用户文档?我想使用云功能来做到这一点,但是我注意到只有一个创建和删除功能?那我该怎么办呢?

这是我目前拥有的

身份验证提供者

  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 个答案:

答案 0 :(得分:1)

当用户更新其Firebase身份验证配置文件时,没有Cloud Functions触发器。为此,我强烈推荐filing a feature request,因为它被遗漏了。

目前,您可以获得的最接近的功能是直接从应用程序代码中调用的Cloud Function。有两个选项:

  1. 让您的应用程序代码首先调用Firebase身份验证API,然后在完成后再让它调用自定义Cloud Function来更新数据库。

  2. 让您的应用程序代码立即调用Cloud Function,然后让Cloud Function update both the user profile和数据库。

我经常以某种方式执行第一种方法,但是看到更多的开发人员采用第二种方法。我认为他们的方法可能更简单,但是我还没有解决。 :)