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

时间:2018-10-08 17:33:12

标签: angular firebase firebase-authentication angular6 angularfire2

技术堆栈:

当前使用angular6,firebase,angularfire2和angularcli6。

尝试/问题:

当前在注册时,我将呼叫Firebase sendEmailVerification。

这会向用户发送电子邮件以验证其帐户。

他们单击链接,该链接会将用户发送到我网站上的帐户管理页面。

然后,我需要将emailVerified字段更新为true,但由于它是只读字段,所以我不允许这样做。

  

由于Firebase似乎不是自动为我做事,我如何将emailVerified设置为true来更新currentUser?

2 个答案:

答案 0 :(得分:3)

向用户发送电子邮件验证链接时,该链接与关注链接非常相​​似

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

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

您可以在firebase身份验证>模板>电子邮件地址验证模板中更改发送到用户电子邮件地址的网址。

您需要使用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);
				}
			)
  		}
	)
  }
  }

参考:Alex来自 https://groups.google.com/forum/#!topic/firebase-talk/EGYwg2vjRq4

答案 1 :(得分:-1)

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