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

dfty9e19  于 2022-10-24  发布在  Angular
关注(0)|答案(7)|浏览(179)

在我使用Firebase管理SDK创建用户后,如何发送验证电子邮件?我在试着把createUser functionsendEmailVerification function结合起来,谁能给出一个提示或答案?谢谢

更新:

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

更新2:

我试图遵循bojeil's answer,我仍然坚持用户使用自定义令牌登录的步骤。它与我当前的管理员用户会话发生冲突,管理员用户被踢出,而新用户登录,即使当我注销新用户时,管理员用户仍然退出,需要登录才能重新进入应用程序。
以下是我在获得定制令牌后在应用程序中的代码:

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

        });

因此,我获得令牌,登录新用户,发送电子邮件验证链接,然后注销新用户。但执行所有这些操作的我的管理员用户也会被注销。我错过了什么吗?

alen0pnh

alen0pnh1#

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

  • 包括Firebase-admin模块。
  • 包括FireBase客户端模块。
  • 使用admin SDK,通过createUser创建新用户
  • 当承诺解决时,获取创建的用户的uid。
  • 使用管理SDK为该uid创建自定义令牌。
  • 使用客户端SDK,使用该自定义令牌登录InWithCustom令牌。
  • 流程中返回一个用户,调用user.sendEmailVerify()
  • 从客户端SDK向该用户发出信号。
cygmwpex

cygmwpex2#

根据Firebase的说法,admin-sdk目前不支持此功能。点击此处查看他们的回复:https://stackoverflow.com/a/44557980/8177355
每当电子邮件/密码身份验证用户登录并尝试使用需要身份验证的功能时,我都会调用onAuthStateChanged(),然后检查用户的记录以进行电子邮件验证。
如果电子邮件没有经过验证,并且我以前没有发送过验证电子邮件,我会自动发送它。我返回一个错误,要求用户验证他们的电子邮件。(我在Firestore中为用户的配置文件设置中存储了一个变量,以指示它是否以前发送过)。
在以后尝试使用该应用程序时,如果该电子邮件仍未经过验证,我将返回相同的错误,并在错误中包含一个标记为“重新发送验证电子邮件”的按钮,该按钮在按下时触发发送验证电子邮件。(通过这种方式,我不会在用户每次尝试做某事时自动发送大量的验证电子邮件。)

chy5wohz

chy5wohz3#

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

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。

yws3nbqq

yws3nbqq4#

为此,您甚至不需要使用Firebase Admin 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);
  });
guz6ccqo

guz6ccqo5#

下面是代码中的bojeil's steps,它们在NodeJS Firebase Cloud函数中工作。假设‘admin’是您的Firebase Admin SDK示例,而‘Firebase’是您的Firebase客户端SDK示例。

var userId = "YOURUSERIDHERE";
admin.auth()
        .createCustomToken(userId)
        .then((customToken) => {
            return firebase.auth().signInWithCustomToken(customToken)
        })
        .then((data) => {
            return data.user.sendEmailVerification({url: "http://YOURREDIRECTURL"});
        }).then((result) => {
            console.log("success");
        }).catch((error) => {
            console.log("faillure");
        });

通过creating a service account并在Admin SDK配置片段中对其进行初始化,确保您已经正确设置了Admin SDK。

s4chpxco

s4chpxco6#

我认为我们可以尝试以下组合:

fnvucqvd

fnvucqvd7#

我所做的很简单:
1.在服务器中创建用户
1.在等待服务器创建的客户端中,并且在使用客户端SDK登录之后,
1.在后台监听Firebase身份验证用户更改事件,然后使用该用户并调用sendEmailVerify
这是我的React代码:

await Api('signupUser', data) // server call

 await firebase
        .auth()
        .signInWithEmailAndPassword(email, password); //client login

 // send email on login
 useEffect(() => {
      return firebase.auth().onIdTokenChanged((user) => 
      user?.sendEmailVerification());
  }, []);

相关问题