在学习发送email verification is possible in latest firebase之后,虽然文档中缺少这一点,但我想自己测试一下。
使用下面的代码片段:
Auth.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
console.log(firebaseUser);
if (firebaseUser.emailVerified) {
// console.log(firebaseUser.emailVerified);
toastr.success('Email verified');
} else {
toastr.info('Do verify email');
}
}
})
字符串console.log(firebaseUser.emailVerified)
总是返回false,尽管发送验证已启动,电子邮件已收到并已单击。
使用电子邮件登录后,我会检查用户是否经过验证,如果没有,则应发送电子邮件:
Auth.$signInWithEmailAndPassword(email, password)
.then(function(firebaseUser) {
if (!firebaseUser.emailVerified) {
firebaseUser.sendEmailVerification();
console.log('Email verification sent');
}
$state.go('home');
})
型
在我的https://console.firebase.google.com/project/my-app-name/authentication/emails
下,一切都是默认的,验证链接为:Follow this link to verify your email address. https://my-app-name.firebaseapp.com/__/auth/handler?mode=<action>&oobCode=<code>
个
我用来注册的电子邮件收到了验证电子邮件消息,然而,点击链接并没有将user.emailVerified
更改为true。
步骤大纲here是否全部存在,或者还有一个步骤在文档中找不到?
6条答案
按热度按时间jexiocij1#
正如Tope在评论中提到的,您需要执行
firebaseUser.reload()
,以便更新对firebaseUser身份验证状态的更改。agxfikkp2#
我只是采取了同样的步骤:
字符串
假
型
1.等待电子邮件
1.单击电子邮件中的链接
1.注销
1.重新登录
然后
型
真
注意步骤3和4:我需要再次登录,然后才能在我的应用程序中看到
emailVerified
的新值。您也可以reload
用户配置文件,这将强制它刷新服务器中的数据,而不是注销并再次登录。这个答案看起来也很相关,但我只是在写下上面的内容后才发现的:Firebase确认邮件没有发送
kx1ctssn3#
以一种非常简约的方式,这就是我最终得到的:
字符串
然后在template中,类似这样:
型
虽然
applyActionCode
还没有为AngularFire Package ,但你仍然可以在AngularJS的东西中下拉到SDK的vanilla JavaScript,除此之外,为什么不呢?我分享了Firebase中电子邮件验证的更多细节:
https://blog.khophi.co/email-verification-firebase-3-0-sdk/
wkftcu5l4#
我们刚刚经历了同样的问题,发现修复方法是使用
user.reload()
函数重新加载用户,并将观察者从onAuthStateChanged
更改为onIdTokenChanged
。这是因为您正在使用新的
emailVerifed
属性更新firebase token,而onIdTokenChanged
正在侦听Id token的更改,并使用正确的值更新user对象。代码片段:
字符串
mi7gmzs65#
在我的情况下,似乎
currentUser.emailVerified
切换到true
,但并不总是。不知道为什么。它切换到true
与Chrome在大多数情况下,但并不总是。它不与Firefox。应用
reload()
方法似乎解决了这个问题。在加载包含oobCode的URL后,我有以下 Saga :
字符串
y3bcpkx16#
我们只需要在用户点击用户确认链接后重新加载用户的状态。特别是如果有人使用firebase UI登录流程,可能会注意到用户注册和登录是同时执行的。对于这种情况,用户需要通过Sign-Out Sign-In重新认证,这不是一个愉快的体验。但是,Firebase提供了一个重新加载用户的选项。将其放在java-await函数中将确保在执行下一个命令之前刷新状态。
字符串