[英]firebase admin SDK create user and send verification email
使用 firebase admin SDK 创建用户后,如何发送验证电子邮件? 我正在尝试将createUser function
和sendEmailVerification function
结合起来,有人可以指出提示或答案吗? 谢谢
用户创建由已在应用程序中登录的管理员用户完成,因此管理员用户只是在仪表板上创建用户。 这与注册方法完全不同。
我试图按照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;
// ...
});
});
所以,我得到了令牌,登录新用户,发送电子邮件验证链接,然后,注销新用户。 但是我正在执行所有这些操作的管理员用户也会被注销。 我在这里想念什么?
好的,这是你可以做的,但你可能会达到配额限制:
您甚至不需要使用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);
});
一个相当干净的解决方案是实际使用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 KEY]是一个Web客户端api密钥,可以从项目设置中检索>添加应用>>单击Web,您将获得带有JSON的配置,在JSON中有一个APIKey是您需要的使用。
根据firebase,admin-sdk目前不支持此功能。 请在此处查看他们的回复: https : //stackoverflow.com/a/44557980/8177355
每当电子邮件/密码验证用户登录并尝试使用需要验证的功能时,我都会调用onAuthStateChanged(),然后检查用户的电子邮件验证记录。
如果电子邮件未经过验证,我之前没有发过验证邮件,我会自动发送。 我返回一个错误,要求用户验证他们的电子邮件。 (我将一个变量存储在firestore中的用户的配置文件设置中,以指示它是否先前已发送过)。
在将来尝试使用该应用程序时,如果仍未验证该电子邮件,我将返回相同的错误,并在标有“重新发送验证电子邮件”的错误中包含一个按钮,该按钮会在按下时触发发送验证电子邮件。 (这样,每次用户尝试执行某些操作时,我都不会自动发送大量验证电子邮件。)
我认为我们可以尝试以下组合:
这是bojeil 在代码中的步骤<\/a>,它在 NodeJS Firebase 云函数中工作。 假设“admin”是您的 Firebase Admin SDK 实例,而“firebase”是您的 Firebase Client 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");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.