Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flatter-如何将Firebase身份验证用户凭据添加到新记录(FireStore文档)?_Firebase_Dart_Firebase Authentication_Flutter_Google Cloud Firestore - Fatal编程技术网

Flatter-如何将Firebase身份验证用户凭据添加到新记录(FireStore文档)?

Flatter-如何将Firebase身份验证用户凭据添加到新记录(FireStore文档)?,firebase,dart,firebase-authentication,flutter,google-cloud-firestore,Firebase,Dart,Firebase Authentication,Flutter,Google Cloud Firestore,我正在尝试创建一个简单的Crud应用程序,其中包含Flatter和Firebase,记录(在FireStore中创建的文档)与经过身份验证的用户相关。因此,Crud功能将仅由创建记录的用户执行。IE用户只能编辑/更新/删除他们首先添加的记录 我的firebase_auth和crud函数与firestore配合得很好。我的问题是如何将两者联系起来。我选择使用用户电子邮件和唯一标识符(我不确定是否最好使用自动生成的用户id)。我创建了一个单独的函数,用于在当前用户的电子邮件添加到firestore文

我正在尝试创建一个简单的Crud应用程序,其中包含Flatter和Firebase,记录(在FireStore中创建的文档)与经过身份验证的用户相关。因此,Crud功能将仅由创建记录的用户执行。IE用户只能编辑/更新/删除他们首先添加的记录

我的firebase_auth和crud函数与firestore配合得很好。我的问题是如何将两者联系起来。我选择使用用户电子邮件和唯一标识符(我不确定是否最好使用自动生成的用户id)。我创建了一个单独的函数,用于在当前用户的电子邮件添加到firestore文档时简单地返回该电子邮件。问题是,我第一次添加记录时,用户电子邮件返回空值,如果我再次提交表单,它将正常工作

String _userEmail;
_getUserAuthEmail() {
  FirebaseAuth.instance.currentUser().then((user){
    setState((){this._userEmail = user.email;}); 
  });
  return this._userEmail;
}
正在从onPressed事件调用的

onPressed: () {
  crudObj.addData({
    'itemName': this.itemName,
    'userEmail': _getUserAuthEmail(),
  }).then((result) {
    dialogTrigger(context);
  }).catchError((e) {
    print(e);
  });
},

由于我刚刚开始,请让我知道是否有更好的方法。干杯。

您将获得null,因为您没有等待currentUser方法结算。更改_getUserEmail方法,如下所示:

String _userEmail;
_getUserAuthEmail() async {
  FirebaseUser user = await FirebaseAuth.instance.currentUser();
  setState(() {
      _userEmail = user.email;
    });
  return this._userEmail;
}
还有,关于这个 “我已选择使用用户电子邮件和唯一标识符(我不确定是否最好使用自动生成的用户id)。”


我建议您使用用户的uid来保存与用户相关的内容。

您是对的。从数据保护的角度来看(现在很重要),只应将UID存储在数据库中,并将电子邮件留在Firebase Auth。