Создание пользователя с адресом электронной почты и паролем в консоли администратора приводит к анонимному пользователю - PullRequest
0 голосов
/ 03 мая 2020

Я создаю пользователей, используя admin SDK, и хочу, чтобы они могли войти в систему с помощью электронной почты и пароля. По какой-то причине, когда я создаю пользователей через клиента, используя только электронную почту и пароль, пользователь может войти в систему, используя эти учетные данные, но когда я создаю пользователя с помощью admin SDK, пользователь отображается как анонимный в панели управления auth, и пользователь может не войдите, используя свой адрес электронной почты и пароль. Ошибки не отображаются на стороне клиента или на стороне Firebase.

Как создать пользователя Firebase с помощью admin SDK и связать этого пользователя с аутентификацией электронной почты?

Узел:

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()
}

Firebase Function Log

Auth Console

1 Ответ

1 голос
/ 03 мая 2020

Ваша функция - триггер типа HTTP :

exports.createUser = functions.https.onRequest

Но вы пытаетесь вызвать его как триггер вызываемого типа :

functions.httpsCallable(addChildIdentifier).call(funcCallDict)

(Обратите внимание, что вызываемый триггер будет определен с onCall, а не onRequest.)

Как видно из ссылок документации, это не одно и то же. Вы, вероятно, вызываете триггер HTTP, и он на самом деле не получает ожидаемых от клиента аргументов, поскольку протокол между ними различен. Попробуйте зарегистрировать req.query.email в функции, чтобы понять, что я имею в виду.

Вам нужно будет либо сделать вашу функцию правильно вызываемой, чтобы ее можно было вызывать из клиента, используя предоставленную библиотеку, либо изменить способ ее вызова. на клиенте можно использовать обычную библиотеку http вместо библиотеки Firebase.

...