Angularjs firebase管理SDK创建用户并发送验证电子邮件

Angularjs firebase管理SDK创建用户并发送验证电子邮件,angularjs,firebase,firebase-authentication,firebase-admin,Angularjs,Firebase,Firebase Authentication,Firebase Admin,使用firebase admin SDK创建用户后,如何发送验证电子邮件? 我正在尝试结合和 有人能给我一个提示或回答吗?谢谢 更新: 用户创建是由已经在应用程序中登录的管理员用户完成的,因此管理员用户只是在dashboad上创建用户。这与注册方法完全不同 更新2: 我试着跟随,但我仍然坚持用户使用自定义令牌登录的步骤。它与我当前的管理员用户会话发生冲突,管理员用户被踢出,而新用户已登录,即使我注销新用户,管理员用户仍将退出,需要登录才能重新进入应用程序 以下是我获取自定义令牌后应用程序中的代码

使用firebase admin SDK创建用户后,如何发送验证电子邮件? 我正在尝试结合和 有人能给我一个提示或回答吗?谢谢

更新: 用户创建是由已经在应用程序中登录的管理员用户完成的,因此管理员用户只是在dashboad上创建用户。这与注册方法完全不同

更新2: 我试着跟随,但我仍然坚持用户使用自定义令牌登录的步骤。它与我当前的管理员用户会话发生冲突,管理员用户被踢出,而新用户已登录,即使我注销新用户,管理员用户仍将退出,需要登录才能重新进入应用程序

以下是我获取自定义令牌后应用程序中的代码:

$http.post('/.custom-token', {uid: $scope.data.data.uid})
        .then(function (response) {
            console.log("custom token here:", response.data.token);
            firebase.auth().signInWithCustomToken(response.data.token)
                .then(function (firebaseUser) {
                    firebaseUser.sendEmailVerification();
                    firebase.auth().signOut().then(function() {
                        // Sign-out successful.
                        console.log("signed out success");
                    }, function(error) {
                        // An error happened.
                    });
                })

                .catch(function(error) {
                    // Handle Errors here.
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    // ...
                });

        });
因此,我获取令牌,登录新用户,发送电子邮件验证链接,然后注销新用户。 但是,我的管理员用户谁是做所有这些得到注销以及。
我这里缺少什么?

您甚至不需要使用Firebase管理SDK来实现这一点。您只需使用常规Firebase客户端SDK即可:

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(function(user) {
     console.log("User successfully created:", user.uid);
     return user.sendEmailVerification();
  })
  .then(function() {
    console.log("Email verification email successfully sent!");
  })
  .catch(function(error) {
    console.log("Error:", error);
  });

好的,这是您可以做的,但您可能会遇到配额限制:

  • 包括firebase管理模块
  • 包括firebase客户端模块
  • 使用AdminSDK,通过createUser创建新用户
  • 当该承诺解决时,获取所创建用户的uid
  • 使用AdminSDK,为该uid创建自定义令牌
  • 使用客户端sdk,使用该自定义令牌使用自定义令牌进行登录
  • 如果在该过程中返回了一个用户,请调用user.sendEmailVerification()
  • 从客户端SDK注销该用户

根据firebase,管理员sdk目前不支持此功能。请看他们的回答:

每当电子邮件/密码身份验证用户登录并尝试使用需要身份验证的功能时,我都会调用onAuthStateChanged(),然后检查用户的记录以进行电子邮件验证

如果电子邮件未经验证,并且我以前没有发送过验证电子邮件,我会自动发送。我返回一个错误,要求用户验证他们的电子邮件。(我在firestore中为用户的配置文件设置中存储了一个变量,以指示之前是否发送过该变量)


在以后尝试使用该应用程序时,如果电子邮件仍未验证,我会返回相同的错误,并且在错误中包含一个标记为“重新发送验证电子邮件”的按钮,按下该按钮时会触发验证电子邮件的发送。(这样我就不会在用户每次尝试做某事时自动发送大量验证电子邮件。)

一个相当干净的解决方案是实际使用REST API

curl 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/getOobConfirmationCode?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"requestType":"PASSWORD_RESET","email":"[user@example.com]"}'

[API密钥]是一个web客户端API密钥,可以从“项目设置”>“添加应用程序”>“单击web”中检索,您将获得带有JSON的配置,在JSON中有一个APIKey,您需要使用它。

我想您忽略了这一点:
如果创建了新帐户,用户将自动登录。请查看下面的“下一步”部分,以获取已登录用户的详细信息。
它将自动登录。正在创建另一个userX的用户已登录,如果此新userX也已登录,则会话令牌中会出现冲突。很遗憾,我不明白您想要什么。这对我很有效。我必须稍微调整第一次回调(user)=>user.user.sendEmailVerification()hmmm,但是使用用户令牌登录时,它会与我当前的管理员用户登录会话冲突吗?用户登录不会与您的管理员会话冲突。在这种情况下,您不能依赖currentUser并在登录时对返回的用户实例运行sendEmailVerification。感谢您的提示,我尝试按照您的解释进行操作,但仍然存在问题,请查看我更新的问题。谢谢。我想我不明白你说的管理员用户是什么意思?您可以做一件事,创建firebaseApp的副本,在其中运行这些临时登录操作:var tempApp=firebase.initializeApp(clientConfig,'temp');然后使用tempApp.auth().signInWithCustomToken。。。这不会与您的其他实例冲突。我花了几天时间研究这个问题,并找到了这个答案。谢谢你的回答。你让我开心:)嗨!我正在调查类似的事情。您是如何解决管理员注销问题的?您应该在sendEmailVerification()的then函数中调用signOut函数。由于sendEmailVerification是异步的,所以应该等到执行完成后再调用signOut函数。