注册用户未显示在 Firebase Firestore 中
Posted
技术标签:
【中文标题】注册用户未显示在 Firebase Firestore 中【英文标题】:Registered user not showing in firebase firestore 【发布时间】:2021-07-23 00:10:24 【问题描述】:简而言之,我希望通过电子邮件和密码在 firebase firestore 中通过身份验证的用户,
成功注册后,我的用户只出现在 authentication 面板中。
我目前正在使用使用 firebase_auth: ^1.1.1
包的 Flutter 应用程序。
所以我希望之后
UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: "abc@example.com",
password: "SuperSecretPassword!"
);
从 firebase_auth 包调用的函数是 createUserWithEmailAndPassword 我想要 Firebase 数据库中的这个注册用户。
【问题讨论】:
【参考方案1】:Firebase 身份验证用于注册用户,而 Firestore 用于存储数据。如果您还想将用户添加到 Firestore,则需要将 cloud_firestore
插件添加到您的 pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
cloud_firestore: ^1.0.7
那么你可以这样做:
final firestoreInstance = FirebaseFirestore.instance;
var firebaseUser = FirebaseAuth.instance.currentUser;
firestoreInstance.collection("users").doc(firebaseUser.uid).set(
"email" : "abc@example.com",
).then((_)
print("success!");
);
这将创建一个名为 users
的集合,其文档 ID 等于经过身份验证的用户 ID,在其中您将拥有用户的电子邮件。
【讨论】:
【参考方案2】:.createUserWithEmailAndPassword
在 auth 中创建一个用户,如果你检查你的 auth 选项卡,你应该会看到创建的用户。 它不会在 firestore 中创建用户
为此,您必须自己实现。
下面是一个示例
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
User user = (await _firebaseAuth.createUserWithEmailAndPassword(
email: email, password: password))
.user;
//if create user succeeds
var user =UserModel(
userID:user.uid,
email:user.email)
FirebaseFirestore.instance
//save user based on their id from auth
.doc("users/$user.uid")
.set(user.toJson());
编辑
您可以创建用户模型 示例:
class UserModel
final String userID;
final String displayName;
final String email, pushToken;
final String phoneNumber;
final String profilePictureURL, dateJoined;
UserModel(
this.dateJoined,
this.userID,
this.email,
);
Map<String, Object> toJson()
return
'userID': userID,
'email': email == null ? '' : email,
'appIdentifier': 'my app',
'dateJoined': DateTime.now(),
;
....
查看json的使用方法
【讨论】:
toJson()从何而来【参考方案3】:除了griffins answer,您还可以使用cloud function 来响应用户创建事件(trigger onCreated)。然后,您可以异步创建用户集合,而不会重载 Flutter 客户端。例如,带有createUserInFirestore
函数的index.ts
:
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();
const db = admin.firestore();
export const createUserInFirestore = functions.auth.user().onCreate(
async (user) =>
return db.collection('users').doc(user.uid).set(
"email" : user.email,
"name" : user.displayName,
);
);
【讨论】:
以上是关于注册用户未显示在 Firebase Firestore 中的主要内容,如果未能解决你的问题,请参考以下文章
为啥注册用户未在 Firebase 中进行身份验证?为啥用户不能将产品添加到数据库 Firebase?
Firebase 注册令牌未显示在 Android Studio logcat 中
Firebase - Auth - 发现已注册但未验证电子邮件的用户