对自定义电子邮件使用firebase电子邮件验证

piok6c0g  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(209)

我正在使用ionic 3和firebase身份验证使用facebook。如果用户在注册时没有提供电子邮件id或根本没有验证,facebook不会返回电子邮件id。
我们的系统要求提供电子邮件ID。因此,作为一种备用方法,我们提示用户提供电子邮件ID。由于我们让用户在此步骤手动提供电子邮件ID,因此需要对其进行验证。
看起来firebase auth sendEmailVerifcation需要已经在auth中的电子邮件ID。由于我们的案例是专门处理缺少电子邮件ID的情况,因此我们如何使用此功能来验证电子邮件ID?
任何其他的想法也欢迎来处理它。这是一个关键的阻滞剂,因为人们滥用我们的奖励系统提供虚假的电子邮件身份证。
我已经研究了sendEmailVerification API,但它似乎不接受任何参数来手动传递电子邮件ID。

constructor(public navCtrl: NavController, 
              public navParams: NavParams,
              private afAuth: AngularFireAuth,
              private fb: Facebook, 
              private platform: Platform,
              private core:CoreProvider,
              public viewCtrl: ViewController,
              private ddlSvc: DoodleDataProvider,
              private alertCtrl:AlertController,
              private toastCtrl: ToastController) {
                
                //block back button on android
                platform.registerBackButtonAction(() => {
                            
                },1);

                afAuth.authState.subscribe(user => {
                  console.log("auth subscription finished: with user:" + JSON.stringify(user))

                  //go back if user could not be retrieved or manual logout is set to true
                  if (!user || core.manualLogout == true) {   
                    return;
                  }

                  user.sendEmailVerfication() //problem here when email is null
                  console.log("initializing user")
                  this.createUser(user.uid)
                });
  }
ql3eal8s

ql3eal8s1#

电子邮件验证适用于使用电子邮件/密码验证进行注册的用户。其目的是验证用户在注册时是否提供了有效的电子邮件地址。您通常希望在使用firebase.auth().createUserWithEmailAndPassword()登录用户后使用电子邮件验证。
电子邮件验证不适用于其他身份验证提供商(如Facebook),因为他们有自己的方式来管理用户的电子邮件地址。

nzk0hqpo

nzk0hqpo2#

正如您所注意到的,sendEmailVerifcation仅适用于auth用户对象中配置的电子邮件,您不能向自定义电子邮件发送电子邮件验证。
特别是在电子邮件最初是null的情况下,您可以做的是在发送验证电子邮件之前,使用您提示他们输入的电子邮件地址更新auth用户电子邮件:

import { getAuth, updateEmail, sendEmailVerification } from "firebase/auth"

const auth = getAuth()

updateEmail(auth.currentUser, "user@example.com").then(() => {
  return sendEmailVerification(auth.currentUser)
}).catch(err => {
  // ...
})

相关问题