在 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
技术堆栈:
目前正在使用 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