在管理控制台中使用电子邮件和密码创建用户会导致匿名用户

Creating user with email and password in admin console results in anonymous user

我正在使用管理 SDK 创建用户,我希望他们能够使用电子邮件和密码登录。出于某种原因,当我仅使用电子邮件和密码通过客户端创建用户时,用户可以使用这些凭据登录,但是当我使用 admin SDK 创建用户时,用户在身份验证仪表板中显示为匿名,并且用户可以' 使用他们的电子邮件和密码登录。客户端或 Firebase 端均未显示任何错误。

如何使用管理 SDK 创建 Firebase 用户并将该用户链接到电子邮件身份验证?

节点:

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

  exports.createUser = functions.https.onRequest(async (req, res) => {
    //grab the email and password parameters
    await admin.auth().createUser({
        email: req.query.email,
        password: req.query.password
      })
      //create the user
      .then(function(userRecord) {        
        const child = userRecord.uid;
        console.log('Successfully created new user:', userRecord.uid);
        res.json({
            status: 201,
            data: {
                "message": userRecord.uid
            }
        });
      })
      //handle errors
      .catch(function(error) {
        console.log();
        res.json({
            status: 500,
            data: {
                "error": 'error creating user: ', error
            }
        });
      });
  });

Swift:

func createChild(for parent: Parent,
                     with firstName: String,
                     lastName: String,
                     displayName: String?,
                     chores: [Chore]?,
                     username: String,
                     password: String,
                     completion: @escaping () -> Void = { }) {
        let funcCallDict = [
            "email": username,
            "password": password
        ]
        functions.httpsCallable(addChildIdentifier).call(funcCallDict) { (result, error) in
            if let error = error {
                NSLog("error: adding child with firebase function: \(error)")
                completion()
                return
            }
        }
        completion()
}

你的函数是 HTTP type trigger:

exports.createUser = functions.https.onRequest

但您正试图将其作为 callable type trigger:

functions.httpsCallable(addChildIdentifier).call(funcCallDict)

(请注意,可调用触发器将定义为 onCall,而不是 onRequest。)

正如您从文档链接中看到的,它们不是一回事。您可能正在调用 HTTP 触发器,它实际上并没有从客户端获得您期望的参数,因为它们之间的协议不同。尝试在函数中记录 req.query.email 以了解我的意思。

您必须使您的函数成为适当的可调用函数,以便可以使用提供的库从客户端调用它,或者更改您在客户端调用它的方式以使用常规 http 库而不是 Firebase 库.