[英]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);
}
}
但是,我的问题是,每次用户登录时,都会调用此 function,随后之前设置的字段(如 displayName、createdAt 和 contactEmail)将被覆盖。 如果用户是新用户或只是再次登录,我不知道如何检查 Firebase Auth。
在凭据(您的const response
变量)中,您可以访问response.additionalUserInfo.isNewUser
以了解它是否是新用户。 如果为真则创建用户,否则什么都不做:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.