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

用于电子邮件验证的firebase-ui

司马高昂
2023-03-14

我已使用 firebase-ui 成功设置 Firebase 电子邮件/密码身份验证。

 var uiConfig = {
        signInSuccessUrl: '<?php echo $url; ?>',
        signInOptions: [
            // Leave the lines as is for the providers you want to offer your users.
            firebase.auth.GoogleAuthProvider.PROVIDER_ID,
            firebase.auth.FacebookAuthProvider.PROVIDER_ID,
            firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        tosUrl: '<your-tos-url>'
    };

    // Initialize the FirebaseUI Widget using Firebase.
    var ui = new firebaseui.auth.AuthUI(firebase.auth());
    // The start method will wait until the DOM is loaded.
    ui.start('#firebaseui-auth-container', uiConfig);

但出于安全原因,我希望用户确认她/他的电子邮件。但从上面的代码来看,它并没有向用户发送验证邮件。所以,我使用以下方法向用户发送验证邮件,如果他/她没有验证他的/她的帐户邮件。

firebase.auth().onAuthStateChanged(function(user) {
    if (user && user.uid != currentUid) {
        if (firebase.auth().currentUser.emailVerified) {
            currentUid = user.uid;

        else {
        //---- HERE YOU SEND THE EMAIL
            firebase.auth().currentUser.sendEmailVerification();
            }

但当我使用这个代码时,它会为同一个帐户发送多封验证邮件。这意味着每次用户重新加载页面时都会运行此方法。如果有人能帮助我识别是否使用firebase为特定用户发送了验证邮件,那真的太好了。

共有3个答案

那绪
2023-03-14

您可以使用 SignInSuccessWithAuthResult 回调来发送电子邮件验证。您需要做的是提供一个回调函数并检查用户是否已验证电子邮件,如果没有,则发送电子邮件验证。

滕英奕
2023-03-14

我迟到了,但如果有人像我一样发现它:

if(currentUser.metadata.creationTime === currentUser.metadata.lastSignInTime)

如果是新用户,因此您必须发送验证电子邮件。您也可以在 signInSuccess 中执行此操作,无需查看 onAuthStateChanged

郦祯
2023-03-14

我在这里的示例代码中找到了一个似乎更好的答案来解决这个几乎没有记录的(JavaScript)Firebase问题:

  // FirebaseUI config.
  var uiConfig = {
    callbacks: {
      signInSuccessWithAuthResult: function(authResult, redirectUrl) {

        var user = authResult.user;
        ...
        if (authResult.additionalUserInfo.isNewUser)
        {
            console.log("new signin");
            user.sendEmailVerification();
        }
        ...
        return true;
      },

享受

 类似资料:
  • 如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子

  • 我有一个关于firebase电子邮件验证工作的问题。 案例: 我的用户已登录我的网站(使用设备A)。 他们使用其他浏览器或设备(设备B)创建另一个帐户,但他们使用他已登录的浏览器和设备(设备A)打开电子邮件验证链接。 已经登录的用户(在设备A中)发生了什么?firebase是将它们签出还是只是验证新的电子邮件,但仍然与当前用户签入?

  • 我是Firebase的新手。我需要一种在注册过程中验证电子邮件地址的方法。未经验证,用户不应该自动登录。我可以添加什么代码来检查电子邮件是否经过验证。如果是,用户可以登录。如果不是,他们需要首先登录。请参阅下面的代码

  • 我的电子邮件验证有问题。我的错误是“用户为空”,因此它不会发送验证电子邮件,但会在控制台和My console.firebase.google中显示登录uid。com项目显示已注册的电子邮件。我应该更改什么,以便发送电子邮件,并且在用户验证其电子邮件之前不允许访问?我读过文件,但想不出来。提前谢谢你。

  • 每当我在Firebase中使用电子邮件/密码身份验证提供程序时,提供程序都会在成功注册时发送一个无记名令牌,即使是。是否有一种开箱即用的方法将电子邮件/密码身份验证提供程序配置为在用户验证其电子邮件地址之前不发送无记名令牌(并返回403错误)? 请注意,我知道如何创建用户、登录用户、发送验证电子邮件等。。。使用firebase v9。x通过firebase/auth中的方法创建用户(使用Email

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