Angularjs firebase管理SDK创建用户并发送验证电子邮件
使用firebase admin SDK创建用户后,如何发送验证电子邮件? 我正在尝试结合和 有人能给我一个提示或回答吗?谢谢 更新: 用户创建是由已经在应用程序中登录的管理员用户完成的,因此管理员用户只是在dashboad上创建用户。这与注册方法完全不同 更新2: 我试着跟随,但我仍然坚持用户使用自定义令牌登录的步骤。它与我当前的管理员用户会话发生冲突,管理员用户被踢出,而新用户已登录,即使我注销新用户,管理员用户仍将退出,需要登录才能重新进入应用程序 以下是我获取自定义令牌后应用程序中的代码:Angularjs firebase管理SDK创建用户并发送验证电子邮件,angularjs,firebase,firebase-authentication,firebase-admin,Angularjs,Firebase,Firebase Authentication,Firebase Admin,使用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注销该用户
在以后尝试使用该应用程序时,如果电子邮件仍未验证,我会返回相同的错误,并且在错误中包含一个标记为“重新发送验证电子邮件”的按钮,按下该按钮时会触发验证电子邮件的发送。(这样我就不会在用户每次尝试做某事时自动发送大量验证电子邮件。)一个相当干净的解决方案是实际使用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函数。