使用 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 目前不支持此功能。在这里查看他们的回复: https://stackoverflow.com/a/44557980/8177355
每当电子邮件/密码身份验证用户登录并尝试使用需要身份验证的功能时,我都会调用 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":"[[email protected]]"}'
[API KEY] 是一个 Web 客户端 api 密钥,可以从项目设置 > 添加应用程序 >> 单击 web 中检索,您将获得带有 JSON 的配置,在 JSON 中,有一个 APIKey 是您所使用的 APIKey需要使用。
您甚至不需要为此使用 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);
});
这是代码中的bojeil 的步骤,它在 NodeJS Firebase 云函数中工作。假设“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");
});
通过创建服务帐户并在 Admin SDK 配置片段中初始化它,确保您已正确设置 Admin SDK。
我认为我们可以尝试以下组合:
我做的很简单:
这是我的 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());
}, []);
2023
已接受的答案和其他一些答案现在已经过时了。现在有一个函数 generateEmailVerificationLink 可以为任何持久用户生成验证链接。
生成验证链接并发送,例如使用Nodemailer(我推荐这种方式,很简单)或某些第3方邮件API。