Проверьте, является ли пользователь анонимным в Firestore Cloud Function - PullRequest
0 голосов
/ 05 ноября 2019

Когда пользователь проходит аутентификацию, я запускаю облачную функцию Firestore Cloud ниже:

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

exports.createUserAccount = functions.auth.user().onCreate((user) => {
    const uid = user.uid
    const firstName = user.firstName
    const familyName = user.familyName
    const displayName = user.displayName
    const email = user.email
    const photoURL = user.photoURL

    const newUser = admin.firestore().doc(`/users/${uid}`)

    return newUser.set({
        firstName: firstName,
        familyName: familyName,
        displayName: displayName,
        email: email,
        photoURL: photoURL,
    })
}) 

Я сталкиваюсь с проблемой, когда пользователь входит в систему анонимно. Я попытался добавить const isAnonymous = user.isAnonymous и затем вернуть его в;

return newUser.set({
    isAnonymous: isAnonymous,

ОШИБКА ВХОДИТ В КОНСОЛЬ

Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field isAnonymous).

Мой вопрос заключается в том, как я могу проверить, вошел ли пользователь анонимно в системеили не через облачную функцию Firebase?

1 Ответ

1 голос
/ 05 ноября 2019

Объект UserRecord , доставленный вашей функции аутентификации, никогда не будет иметь свойства isAnonymous. Вот почему он всегда принимает значение undefined. Проверьте ссылку на документацию API, чтобы увидеть, что там. Я не уверен, как вы пришли к выводу, что он должен быть там.

Каждый поставщик аутентификации, который проверил учетную запись, присутствует в свойстве массива providerData объекта UserRecord. Вы должны просмотреть этот массив, чтобы проверить, является ли он анонимным аккаунтом. В частности, вы должны проверять поле providerId каждого объекта UserInfo в массиве providerData. Я не уверен на 100%, если это правильный подход, но из того, что я наблюдаю, анонимная учетная запись будет иметь пустой массив providerData, так как он не был проверен никакими провайдерами аутентификации.

...