firebase admin SDK创建用户并发送验证邮件

pas*_*ion 9 angularjs firebase firebase-authentication firebase-admin

在使用firebase admin SDK创建用户后,如何发送验证电子邮件?我想要结合起来createUser function,sendEmailVerification function 有人可以指出一个暗示或答案吗?谢谢

更新:

用户创建由已在应用程序中登录的管理员用户完成,因此管理员用户只是在仪表板上创建用户.这与注册方法完全不同.

更新2:

我试图按照bojeil的回答,我仍然坚持用户使用自定义令牌登录的步骤.它与我当前的管理员用户会话发生冲突,管理员用户被踢出,而新用户已登录,即使我退出新用户,管理员用户仍然不在,需要登录才能重新登录该应用程序.

获取自定义令牌后,这是我在应用程序中的代码:

$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;
                    // ...
                });

        });
Run Code Online (Sandbox Code Playgroud)

所以,我获得令牌,登录新用户,发送电子邮件验证链接,然后注销新用户.但我正在执行此操作的管理员用户也会退出.我在这里想念的是什么?

boj*_*eil 13

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

  • 包括firebase-admin模块.
  • 包括firebase客户端模块.
  • 使用admin sdk,通过createUser创建新用户
  • 当该承诺解决时,获取创建的用户的uid.
  • 使用admin sdk,为该uid创建自定义标记.
  • 使用客户端sdk,使用该自定义令牌signInWithCustom令牌.
  • 在此过程中返回一个用户,调用user.sendEmailVerification()
  • signOut来自客户端SDK的用户.


Mat*_*out 5

根据 firebase 的说法,admin-sdk 目前不支持此功能。在这里查看他们的回复: https ://stackoverflow.com/a/44557980/8177355

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

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

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