gpt4 book ai didi

typescript - 如何防止 Firebase 一遍又一遍地创建同一个用户?

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:48 26 4
gpt4 key购买 nike

我目前正在 Ionic 4 框架(以 Firebase 作为后端)开发一个事件应用程序,我在 Cloud Firestore 数据库上创建用户时遇到了问题。每当我使用 Google 或 Facebook 登录时,Firebase 都会在数据库中创建一个新条目,尽管我使用的是同一用户登录。如果当前 user_id 已经存在于数据库中,我已经尝试实现检查,但我的代码似乎有问题。我该如何修复它,以便我的代码正确检查当前用户是否已存在于数据库中?

目前,我在我的登录组件中检查用户是否已存在于 Cloud Firestore 数据库中。我已经尝试在我的用户服务中直接检查 createUser() 函数。但行为完全相同。

以下代码显示了我的登录组件中的功能:

googleLogin() {
if (this.authService.googleLogin()) {
this.authService.getAuthState().subscribe(user => {
if (user) {
// User is signed in.
console.log("Logged In ", user.email);
this.userId = user.uid;
this.user.name = user.displayName;

this.afs.firestore.doc('user/' + user.uid).get()
.then(docSnapshot => {
if (docSnapshot.exists) {
console.log("user already exists");
} else {
this.userservice.createUser(this.user);
}
});
} else {
console.log("Not Logged In");
this.userId = undefined;
}
}
);

以下代码显示了我的用户服务中的功能:

createUser(user: any): Promise<any> {
return this.afs.collection("user").add({
blockPushMessages: user.blockPushMessages,
email: user.email,
isAnonymous: user.isAnonymous,
name: user.name,
partyLevel: user.partyLevel,
aliasName: user.aliasName,
dateOfBirth: user.dateOfBirth,
gender: user.gender,
homeTown: user.homeTown,
personImage_id: user.personImage_id,
registrationDate: user.registrationDate,
relationshipStatus: user.relationshipStatus,
school: user.school
});
}

以下代码显示了我的身份验证服务中的 google 登录功能:

googleLogin() {
if (this.platform.is("cordova")) {
this.nativeGoogleLogin();
} else {
this.webGoogleLogin();
}
return true;
}

async nativeGoogleLogin(): Promise<firebase.User> {
try {
const gplusUser = await this.gplus.login({
webClientId:
"**********",
offline: true,
scopes: "profile email"
});
return await this.afAuth.auth.signInWithCredential(
firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken)
);
} catch (err) {
console.log(err);
}
}

async webGoogleLogin(): Promise<void> {
try {
const provider = new firebase.auth.GoogleAuthProvider();
const credential = await this.afAuth.auth.signInWithPopup(provider);
} catch (err) {
console.log(err);
}
}

我希望代码检查当前用户是否已存在于我的 Cloud Firestore 数据库中。目前的实际结果是,代码忽略了检查,只是在数据库上创建了一个新用户,即使我使用相同的用户登录也是如此。

如果有人知道我的代码有什么问题,请告诉我。我将不胜感激!

最佳答案

你好像是在比较uid,你确定uid是你后端的userid吗?

关于typescript - 如何防止 Firebase 一遍又一遍地创建同一个用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54631509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com