В настоящее время я занимаюсь разработкой приложения для событий в платформе 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.Фактический результат на данный момент состоит в том, что код игнорирует проверку и просто создает нового пользователя в базе данных, даже если я вхожу с тем же пользователем.
Если кто-то знает, что не так с моим кодом, пожалуйста,дай мне знать.Буду признателен за это!