如何在不关闭当前Firebase会话的情况下创建用户身份验证

7 浏览
0 Comments

如何在不关闭当前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({...});
});

编辑:

frontend JS

Cloud Function

0
0 Comments

问题的原因是客户端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会话的情况下创建用户认证的解决方法。

0