在我的应用程序中,我添加了一些其他提供商(例如twitter或facebook)用于登录过程。在一种情况下使用Twitter提供程序时,它不会获取电子邮件地址。我怀疑,因为Twitter不知道用户的电子邮件(可能仅使用电话号码登录)。现在如何验证用户是否没有电子邮件可以使用<firebase.User>user.sendEmailVerification()
?
我可以使用Angular为我的应用程序登录过程提供一些代码。
public async loginWithDifferentProvider(provider: 'Google' | 'Facebook' | 'Twitter'): Promise<void | string | boolean> {
let auth;
switch (provider) {
case 'Google':
auth = new firebase.auth.GoogleAuthProvider();
break;
case 'Facebook':
auth = new firebase.auth.FacebookAuthProvider();
break;
case 'Twitter':
auth = new firebase.auth.TwitterAuthProvider();
break;
}
try {
await this.oAuthLogin(auth);
return this.router.navigate(['/stories']);
} catch (e) {
this.notify.danger(e.message);
}
}
private async oAuthLogin(provider) {
const loginMetaData: UserCredential = await this.auth.firebaseAuthInstance.signInWithPopup(provider);
const user: firebase.User = loginMetaData.user;
let photoUrl: string;
switch (loginMetaData.credential.providerId) {
case 'twitter.com':
photoUrl = loginMetaData.user.photoURL.replace('_normal', '');
break;
case 'facebook.com':
const id = loginMetaData.additionalUserInfo.profile['id'];
photoUrl = `https://graph.facebook.com/${id}/picture?type=large`;
break;
}
return this.userService.createUserFromOtherProvider(user, photoUrl); // creates firestore doc. of the user
}
答案 0 :(得分:1)
sendEmailVerification
方法专门用于验证用户的电子邮件地址。如果用户个人资料中没有电子邮件地址,则调用该方法毫无意义。
您可以检测到他们的个人资料没有电子邮件地址,然后向用户询问他们的电子邮件地址。然后,您可以set the email address in their Firebase Authentication profile并在之后致电sendEmailVerification
进行验证。