当前位置: 首页 > 知识库问答 >
问题:

使用者单击firebase的电子邮件验证链接后,emailVerified不会更改

左华灿
2023-03-14

在了解到在最新的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');
      }
    }
  })

< code > console . log(firebase user . email verified)始终返回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 下,默认情况下所有内容都是,验证链接为:

< code >点击此链接验证您的电子邮件地址。https://my-app-name.firebaseapp.com/__/auth/handler?mode=

我用于注册的电子邮件会收到验证电子邮件,但是,单击该链接不会将 user.emailVerified 更改为 true。

此处列出的步骤是否全部存在,还是在文档中找不到另一个步骤?

共有3个答案

鱼旺
2023-03-14

以一种非常简约的方式,这就是我最终得到的:

angular.module('theApp')

.controller('emailVerifyController', ['$scope', '$stateParams', 'currentAuth', 'DatabaseRef',
  function($scope, $stateParams, currentAuth, DatabaseRef) {
    // where currentAuth and DatabaseRef is what they sound like
    $scope.doVerify = function() {
      firebase.auth()
        .applyActionCode($stateParams.oobCode)
        .then(function(data) {

          // change emailVerified for logged in User
          // you can update a DatabaseRef endpoint in here
          // whatever!

          toastr.success('Verification happened', 'Success!');
        })
        .catch(function(error) {
          $scope.error = error.message;
          toastr.error(error.message, error.reason, { timeOut: 0 });
        })
    };
  }
])

然后在模板中,如下所示:

<a ng-click="doVerify()" class="button large">Verify my Account</a>

尽管AngularFire尚未包装<code>applyActionCode</code>程序,但您仍然可以在AngularJS中使用SDK的普通Javascript,此外,为什么不呢!

我在Firebase中分享有关电子邮件验证的更多详细信息:
https://blog.khophi.co/email-verification-firebase-3-0-sdk/

狄溪叠
2023-03-14

我只是采取了同样的步骤:

auth.currentUser.emailVerified

auth.currentUser.sendEmailVerification()
  1. 等待电子邮件
  2. 单击电子邮件中的链接。
  3. 注销
  4. 再次登录

然后

auth.currentUser.emailVerified

真实的

注意步骤3和4:我需要再次登录,然后emailVerated的新值在我的应用程序中可见。

这个答案似乎也很重要,但我在写了上面的内容后才发现它:Firebase确认电子邮件未发送

郎子平
2023-03-14

正如Tope在评论中提到的,您需要执行< code > firebaseUser . reload()来更新对firebase user的身份验证状态的更改。

 类似资料:
  • 我正在使用RNfirebase与我的react-native应用程序。我可以得到电子邮件验证链接来打开我的应用程序,但仅此而已。我知道我需要访问链接并解析它以获得oobCode并将其应用于用户。但是,当我使用该链接打开应用程序时,我从'react-native'中使用{Linking}触发的监听器似乎没有检测到该URL。我想将他们重定向到“感谢您验证您的电子邮件”页面,以及使用由Firebase生

  • 我正在使用AWS Cognito进行电子邮件验证,但我遇到的用户注册问题是,它只发送验证代码,无法自定义电子邮件,因此我可以重定向用户,以便在Cognito上验证其电子邮件。使用。net core 2.1 C#。 到目前为止,我得到的是使用亚马逊提供的SES发送电子邮件验证码。 我想使用电子邮件验证链接验证用户电子邮件。

  • 嗨,伙计们,我正在尝试在我的应用程序中进行自动登录,但在登录完成之前,我想知道用户是否验证了他的电子邮件或否。 问题是:即使我验证了我的帐户,代码也看不到这个并说是假的。 这是我的密码。 这条线总是假的,即使我验证了我的帐户。

  • 问题内容: 我检查了用户是否通过电子邮件验证。但是,无论我发送并确认了多少电子邮件,验证状态仍为。检查时我做错什么了吗? 问题答案: 我如何实现此功能的方法是添加一个 带有时间间隔的,它将检查用户是否已通过验证,然后在完成验证后终止计时器。 检查您当前用户状态的功能:

  • 我检查了用户是否通过电子邮件进行验证。但是,无论我发送并确认了多少封电子邮件,验证状态仍然是。我在检查时是否做错了什么?

  • 如果我打开在桌面浏览器上收到的电子邮件中的链接,则用户的电子邮件被成功验证(标志FirebaseUser.isemailVerificed返回true) 然而,我尝试使用深度链接。因此,如果用户点击移动设备上的链接,将在应用程序中重定向,我有深度链接监听器。我希望当我收到应用程序内的深度链接数据时,isemailverificed标志会立即更新,但事实并非如此)。实际上,即使在按下链接时,也应该进