【发布时间】:2019-11-06 16:54:13
【问题描述】:
我有这个使用 SignInWithGogle 来登录/注册用户的功能
void _signInWithGoogle() async {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
print('user email here $user.email');
setState(() {
if (user != null) {
_success = true;
_userID = user.uid;
final userToSubmit = User(
email: user.email,
id: user.uid,
name: user.displayName,
owner: false,
favorites: null);
print('USER ID USER ID USER ID ${user.uid}');
DocumentReference dbRef =
Firestore.instance.collection('users').document(user.uid);
dbRef.get().then((value) {
print('VALUE EXISTS? ${value.exists} y VALUE $value');
value.exists ?
_goToHomeScreen(user)
:
dbRef
.collection('prf')
.document('profile')
.setData(userToSubmit.toJson())
.then(_goToHomeScreen(user));
});
} else {
_success = false;
}
});
}
问题是,当用户注销然后登录时,它会设置新数据,并且用户丢失了他们拥有的所有东西,比如收藏夹等等......我认为检查文档是否存在应该可以解决问题,但尽管文档是否存在返回 false。 这就是我说的这段代码
DocumentReference dbRef =
Firestore.instance.collection('users').document(user.uid);
dbRef.get().then((value) {
print('VALUE EXISTS? ${value.exists} y VALUE $value');
value.exists ?
_goToHomeScreen(user)
:
dbRef
.collection('prf')
.document('profile')
.setData(userToSubmit.toJson())
.then(_goToHomeScreen(user));
});
}
为什么即使 user.uid 和文档存在,它也会返回 false?我做错了什么?
【问题讨论】:
-
为什么要投反对票?!?
标签: firebase flutter dart google-cloud-firestore