技术堆栈:
当前使用angular6,firebase,angularfire2和angularcli6。
尝试/问题:
当前在注册时,我将呼叫Firebase sendEmailVerification。
这会向用户发送电子邮件以验证其帐户。
他们单击链接,该链接会将用户发送到我网站上的帐户管理页面。
然后,我需要将emailVerified字段更新为true,但由于它是只读字段,所以我不允许这样做。
由于Firebase似乎不是自动为我做事,我如何将emailVerified设置为true来更新currentUser?
答案 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