如何仅在 Firebase 3 中创建用户而不对其进行身份验证?

IT技术 javascript firebase firebase-authentication angularfire
2021-02-23 10:17:54

我正在处理一个 angularfire 项目,我想知道如何在 Firebase 3 中创建一个用户,一旦完成,不要对指定的用户进行身份验证。在之前的 Firebase 版本中,我们有一个名为 createUser(email, password) 的方法。现在我们只有 createUserWithEmailAndPassword(email, password) 方法,它创建并验证指定的用户。

2个回答

问题的答案是:你不能。

我们有类似的情况,我们有可以创建其他用户的“管理员”用户。使用 2.x 这很容易。对于 3.x,这是一个失败,因为该功能已被完全删除。

如果您在 3.x 中创建用户,则您以该用户身份进行身份验证,并取消对登录帐户的身份验证。

这更深入,因为您需要重新进行身份验证以创建另一个用户;所以管理员要么手动执行此操作,要么(畏缩)在本地存储身份验证数据,因此它可能是一个自动化过程(畏缩畏缩,请不要这样做)

Firebase 公开强调 2.x 将继续得到支持,因此您可能只想避免 3.x。

更新

Firebaser 的其中一个实际上想出了一个解决方法。从概念上讲,您有一个 admin 用户登录。然后您创建第二个连接到 firebase 并与另一个用户进行身份验证,然后该连接创建新用户。冲洗 - 重复。

再次更新

看到这个问题和答案

Firebase 踢出当前用户

我想用指定的电子邮件定义关键节点。甚至限制对当前节点密钥的读取访问,比较提供的电子邮件地址和密钥?
2021-04-20 10:17:54
我喜欢这个概念。但是,根据 Firebase 中的默认规则,您必须通过身份验证才能进行读写。如果您将 .read 设置为 true,那么它会起作用,但这会向任何想要阅读它的人打开该节点。
2021-04-28 10:17:54
新控制台与 API 的 v2.x 或 v3.x 配合良好。您将希望继续使用 2.x API 来保留您需要的功能。
2021-04-30 10:17:54
我必须使用带有 firebase 2 的新控制台,还是会保留之前的控制台?
2021-05-01 10:17:54
谢谢你。我正在考虑解决这种情况的方法。我将创建一个由我们可以调用“queueNewUser()”的新方法创建的队列列表,我可以将提供的数据保存到数据库中的新条目中。在我的登录页面上,在使用方法 signInWithEmailAndPassword() 进行 firebase 登录过程之前,我们检查电子邮件是否在队列列表中。如果是,请使用 createUserWithEmailAndPassword() 方法并从列表中删除索引。如果没有,请使用 signInWithEmailAndPassword()。我可以忍受,你觉得呢?
2021-05-16 10:17:54

您可以使用云功能和 Firebase 管理 SDK 来执行此操作。创建如下所示的 HTTP 函数。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions

exports.createUser = functions.https.onRequest((request, response) => {
    if (request.method !== "POST") {
        response.status(405).send("Method Not Allowed");
    } else {
        let body = request.body;

        const email = body.email;
        const password = body.password;
        const displayName = body.displayName;

        admin.auth().createUser({
            email: email,
            emailVerified: false,
            password: password,
            displayName: displayName,
            disabled: false
        })
        .then((userRecord) => {
            return response.status(200).send("Successfully created new user: " +userRecord.uid);
        })
        .catch((error) => {
            return response.status(400).send("Failed to create user: " + error);
        });
    }
});

在您的客户端应用程序中,使用 Http 请求调用此函数,例如使用 ajax

$.ajax({
       url: "the url generated by cloud function",
       type: "POST",
       data: {
           email: email,
           password: password,
           displayName: name
       },
       success: function(response) {
            console.log(response);
       },
       error: function(xhr, status, error) {
             let err = JSON.parse(xhr.responseText);
                 console.log(err.Message);
             }
       });
有什么方法可以使用 ngZone 在 Angular 中执行此任务,该 ngZone 在当前运行的 Angular 应用程序范围之外创建和验证用户?
2021-05-05 10:17:54