Angularfire - 仅在第一次 OAuth(Google,facebook)登录时写入 Firestore
Angularfire - Only write to Firestore on the first OAuth (Google, facebook) login
包:
"@angular/cdk": "~10.0.0",
"@angular/fire": "^6.0.5",
"firebase": "^8.0.0",
我有一个 Angular 应用程序,使用 Firebase 作为无服务器后端解决方案。用户可以使用他们的 Facebook 或 Google 帐户通过 Firebase Auth 注册和登录。他们成功登录后,我将他们的信息(displayName、createdAt、contactEmail)存储在 Firestore 中。
这是我使用的方法:
public async googleLogin(): Promise<void> {
try {
const provider = new firebase.auth.GoogleAuthProvider();
const response = await this.afAuth.signInWithPopup(provider);
return this.afStore.create(response.user.uid,
{
id: response.user.uid,
contactEmail: response.user.email,
displayName: response.user.displayName,
createdAt: this._userDB.createTimestamp()
}
);
} catch (error) {
return Promise.reject(error);
}
}
但是,我的问题是,每次用户登录时,都会调用此函数,随后之前设置的字段(如 displayName、createdAt 和 contactEmail)将被覆盖。如果用户是新用户或只是再次登录,我不知道如何检查 Firebase Auth。
在凭据(您的 const response
变量)中,您可以访问 response.additionalUserInfo.isNewUser
to know if it is a new user or not。如果为真则创建用户,否则什么也不做:
public async googleLogin(): Promise<void> {
try {
const provider = new firebase.auth.GoogleAuthProvider();
const response = await this.afAuth.signInWithPopup(provider);
// return an empty promise if user is not new
if (!response.additionalUserInfo.isNewUser) { return Promise.resolve(); }
return this.afStore.create(response.user.uid,
{
id: response.user.uid,
contactEmail: response.user.email,
displayName: response.user.displayName,
createdAt: this._userDB.createTimestamp()
}
);
} catch (error) {
return Promise.reject(error);
}
}
包:
"@angular/cdk": "~10.0.0",
"@angular/fire": "^6.0.5",
"firebase": "^8.0.0",
我有一个 Angular 应用程序,使用 Firebase 作为无服务器后端解决方案。用户可以使用他们的 Facebook 或 Google 帐户通过 Firebase Auth 注册和登录。他们成功登录后,我将他们的信息(displayName、createdAt、contactEmail)存储在 Firestore 中。
这是我使用的方法:
public async googleLogin(): Promise<void> {
try {
const provider = new firebase.auth.GoogleAuthProvider();
const response = await this.afAuth.signInWithPopup(provider);
return this.afStore.create(response.user.uid,
{
id: response.user.uid,
contactEmail: response.user.email,
displayName: response.user.displayName,
createdAt: this._userDB.createTimestamp()
}
);
} catch (error) {
return Promise.reject(error);
}
}
但是,我的问题是,每次用户登录时,都会调用此函数,随后之前设置的字段(如 displayName、createdAt 和 contactEmail)将被覆盖。如果用户是新用户或只是再次登录,我不知道如何检查 Firebase Auth。
在凭据(您的 const response
变量)中,您可以访问 response.additionalUserInfo.isNewUser
to know if it is a new user or not。如果为真则创建用户,否则什么也不做:
public async googleLogin(): Promise<void> {
try {
const provider = new firebase.auth.GoogleAuthProvider();
const response = await this.afAuth.signInWithPopup(provider);
// return an empty promise if user is not new
if (!response.additionalUserInfo.isNewUser) { return Promise.resolve(); }
return this.afStore.create(response.user.uid,
{
id: response.user.uid,
contactEmail: response.user.email,
displayName: response.user.displayName,
createdAt: this._userDB.createTimestamp()
}
);
} catch (error) {
return Promise.reject(error);
}
}