如何在不关闭当前Firebase会话的情况下创建用户身份验证
如何在不关闭当前Firebase会话的情况下创建用户身份验证
我想创建一个系统,管理员可以通过电子邮件创建用户认证。我按照文档开发了代码,但当前会话已关闭。我只想创建认证以获取uid,然后使用我想要存储的数据在数据库中创建用户。以下是我的代码:
var email = emailInput.value; var password = "Abcd1234"; firebase.auth().createUserWithEmailAndPassword(email, password).then((userCredential) => { var user = userCredential.user; //user.uid包含我想要在ref usuarios上创建实例的id database.ref("usuarios/"+ user.uid).set({...}); });
编辑:
问题的原因是客户端SDK无法创建新用户,需要使用Firebase Admin SDK来创建新用户。解决方法是使用Firebase云函数来创建用户,并通过验证用户身份来确保调用函数的用户是管理员。以下是使用云函数创建新用户的示例代码:
exports.createNewUser = functions.https.onCall((data, context) => { if (isAdmin(context.auth.uid)) { return admin.auth().createUser({ email: data.email, password: data.password, displayName: data.name }).then((userRecord) => { console.log('Successfully created new user:', userRecord.uid); return { uid: userRecord.uid } }).catch((error) => { console.log('Error creating new user:', error); return { error: "Something went wrong" } }); } return {error: "unauthorized" } })
你可以使用Firebase自定义声明或者在数据库中存储管理员的UID来验证调用函数的用户是否为管理员。确保只有你可以编辑数据库中的管理员节点部分。调用该函数的方法如下:
const createNewUser = firebase.functions().httpsCallable('createNewUser'); createNewUser({ name: "test", email: "test.test", password: "122345678" }) .then((result) => { var response = result.data; });
以上是关于如何在不关闭当前Firebase会话的情况下创建用户认证的解决方法。