Firebase проверяет проблему электронной почты при использовании метода sendEmailVerification в AngularFire2 - PullRequest
0 голосов
/ 08 октября 2018

Технический стек:

В настоящее время используется angular6, firebase, angularfire2 и angularcli6.

Попытка / выпуск:

В настоящее время при регистрации я звоню в Firebase sendEmailVerification.

Отправляет пользователю электронное письмо для проверки своей учетной записи.

Они нажимают на ссылку, и она отправляет пользователя на страницу управления учетной записью на моем веб-сайте.

Затем мне нужно обновить поле emailVerified на true, но оно не позволит мне, так как оно доступно только для чтения.

Как я могу обновить currentUser с установленным в emailVerified значением true, как Firebase не делает?мне кажется, я делаю это автоматически?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Когда вы отправляете ссылку для проверки электронной почты пользователю, ссылка очень похожа на следующую

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

Когда пользователь нажимает ссылку, он перенаправляет вас на маршрут с новым паролемвашего домена (localhost: здесь 4200).

Вы можете изменить маршрут и компонент в firebase аутентификации> Шаблоны> Шаблоны проверки адреса электронной почты, изменив URL, отправленный на адрес электронной почты пользователя.

Вам нужнореализовать вашу логику проверки электронной почты с помощью методов checkActionCode и applyActionCode, используя oobCode, предоставленный в URL.

Я реализовал это, как показано ниже

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

0 голосов
/ 08 октября 2018

Вы можете использовать API user.reload() для этого.Проверьте документ здесь: https://firebase.google.com/docs/reference/js/firebase.User#reload

...