【问题标题】:Firebase verify email issue when using sendEmailVerification method in AngularFire2在 AngularFire2 中使用 sendEmailVerification 方法时,Firebase 验证电子邮件问题
【发布时间】:2019-03-13 10:15:33
【问题描述】:

技术栈:

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

尝试/问题:

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

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

他们点击链接,它会将用户转到我网站上的帐户管理页面。

然后我需要将 emailVerified 字段更新为 true,但它不会让我因为它是只读字段。

如何更新 currentUser 并将 emailVerified 设置为 true,因为 Firebase 似乎不会自动为我执行此操作?

【问题讨论】:

    标签: angular firebase firebase-authentication angular6 angularfire2


    【解决方案1】:

    当您向用户发送电子邮件验证链接时,该链接与以下非常相似

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

    当用户点击链接时,它会将您重定向到您域的新密码路由(此处为 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);
    				}
    			)
      		}
    	)
      }
      }

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

    【讨论】:

    • 谢谢,我会尽快试试这个
    • @Prakash Khadka 一个问题。为什么使用:let ref=firebase.database().ref('verifiedEmails/'+user.data.email.replace('.','*'));
    【解决方案2】:

    您可以使用user.reload() API 来执行此操作。在此处查看文档:https://firebase.google.com/docs/reference/js/firebase.User#reload

    【讨论】:

    • 谢谢,我会尽快尝试
    • 我试过了,emailVerified 字段仍然是假的。我如何使它成为现实?因为单击电子邮件中的验证链接不起作用?
    猜你喜欢
    • 2021-05-11
    • 2017-06-16
    • 1970-01-01
    • 2021-05-15
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多