在 AngularFire2 中使用 sendEmailVerification 方法时 Firebase 验证电子邮件问题

Firebase verify email issue when using sendEmailVerification method in AngularFire2

技术堆栈:

目前正在使用 angular6、firebase、angularfire2 和 angularcli6。

尝试/问题:

目前在注册时我调用了 Firebase sendEmailVerification。

这会向用户发送一封电子邮件以验证他们的帐户。

他们点击 link 并将用户转到我网站上的帐户管理页面。

然后我需要将字段 emailVerified 更新为 true 但它不允许我这样做,因为它是一个只读字段。

How can I update the currentUser with emailVerified set to true, as Firebase doesn't seem to do it automatically for me?

您可以使用 user.reload() API 来做到这一点。在此处查看文档:https://firebase.google.com/docs/reference/js/firebase.User#reload

当您向用户发送电子邮件验证 link 时,link 与以下内容非常相似

http://localhost:4200/new-password?mode=verifyEmail&oobCode=OOBCODEHERE&apiKey=APIKEYHERE&lang=en

当用户点击 link 时,它会将您重定向到您域的新密码路由(此处为 localhost:4200)。

您可以在 firebase 身份验证>模板>电子邮件地址验证模板中更改路由和组件,更改 url 发送到用户电子邮件地址。

您需要使用 url 中提供的 oobCode 自己使用 checkActionCode 和 applyActionCode 方法实现您的电子邮件验证逻辑。

我已经实现如下

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import * as firebase from 'firebase';

@Component({
  selector: 'app-new-password',
  templateUrl: './new-password.component.html',
  styleUrls: ['./new-password.component.css']
})
export class NewPasswordComponent implements OnInit {
 emailVerificationCode:string;
 apiKey:string;
  constructor(private activatedRoute: ActivatedRoute) { 
   this.activatedRoute.queryParams.subscribe(params => {
        this.emailVerificationCode = params['oobCode'];
    });
  }

  ngOnInit() {
   firebase.auth().checkActionCode(this.emailVerificationCode).then(
    (user)=>{
     console.log("User Info KKKKK : " + user.data.email);
     firebase.auth().applyActionCode(this.emailVerificationCode).then(
      ()=>{
       let ref=firebase.database().ref('verifiedEmails/'+user.data.email.replace('.','*'));
       ref.set(true).then(
        ()=>{
         console.log("Email Verfied");
        }
     ).catch(
      (error)=>{
       console.log("Couldn't set true : " + error.message);
      }
     )
      }
   ).catch(
    (error)=>{
     console.log("Error occured : " + error.message);
    }
   )
    }
 )
  }
  }

参考:亚历克斯来自 https://groups.google.com/forum/#!topic/firebase-talk/EGYwg2vjRq4