admin.auth () CurrentUser. возвращение неопределенного в облачной функции - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь создать функцию, которая, когда устройство регистрируется в приложении, будет прикреплять этот uid устройства к uid вошедшего в систему пользователя, который зарегистрировал устройство (это находится в другой коллекции firestore, которая создается автоматически когда пользователь регистрируется).

Вот мой код:

exports.addDeviceToUser = functions.firestore.document('device-names/{device}').onUpdate((change, context) => {
    const currentUser = admin.auth().currentUser;
    const deviceName = context.params.device;
    var usersRef = db.collection('users');
    var queryRef = usersRef.where('uid', '==', currentUser.uid);

    if (authVar.exists) {
        return queryRef.update({sensors: deviceName}).then((writeResult => {
        return console.log('Device attached');
        }));
    } else {return console.log('Device attachment failed, user not signed in');}
});

Я постоянно получаю эту ошибку: «Ошибка типа: невозможно прочитать свойство« uid »из undefined». Очевидно, я не могу получить доступ к информации об аутентификации текущего пользователя. Почему?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Admin SDK не имеет чувства текущего пользователя. Когда вы говорите admin.auth(), вы получаете объект Auth . Как вы можете видеть из документации по API, у него нет свойства currentUser. Только SDK клиента Firebase имеет представление о текущем пользователе, поскольку вы используете его для входа в систему.

Если вам необходимо, чтобы клиентское приложение сообщало, чтобы код Cloud Functions работал с идентификационной информацией пользователя, вам необходимо отправить ему идентификационный токен с клиента и проверить его на сервере. Затем сервер может знать, кто является конечным пользователем, и выполнять действия от его имени. Обычно вы делаете это с помощью триггера типа HTTP. Вызываемые функции автоматически передают эти данные между клиентом и сервером, но вы можете сделать это вручную самостоятельно, используя код, который работает как этот пример .

В настоящий момент триггеры Firestore не имеют немедленного доступа к конечному пользователю, который внес изменения в базу данных. Однако, если вы используете Auth UID пользователя в качестве ключа документа и защищаете этот документ с помощью правил безопасности, вы можете по крайней мере вывести UID пользователя на основе изменений, которые они вносят в документ, извлекая его из идентификатор документа, который изменился.

0 голосов
/ 08 мая 2018

Поскольку по своей природе Cloud Functions выполняются на серверной части и не содержат никакой информации о том, какой пользователь прошел проверку подлинности при добавлении / изменении данных в базе данных.

При записи данных в 'device-names/{device}' документ (из вашего приложения), вы можете включить дополнительный фрагмент данных, который является идентификатором текущего пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...