Request.auth.metadata в правилах безопасности? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть проект Firebase, в котором я хотел бы, чтобы пользователи могли видеть, когда другие пользователи создали свои профили. Первоначально я надеялся, что я смогу использовать user.metadata.creationTime на внешнем интерфейсе, чтобы передать дату в дополнительный информационный документ пользователя и убедиться в ее правильности, указав request.resource.data.datecreated == request.auth. metadata.creationTime "как правило базы данных, но похоже, что это невозможно в соответствии с документацией .

Можно ли как-нибудь проверить правильность даты создания на бэкэнде?

Редактирование дополнительной информации : Ниже приведен код, который запускается при запуске пользователем создает новую учетную запись в моем профиле. Три значения отображаются публично. Я создаю нишу для продажи, чтобы возможность увидеть, когда пользователь впервые создал свою учетную запись, может оказаться полезной при принятии решения о том, является ли продавец поверхностным. Я не хочу, чтобы кто-то мог создать впечатление, что они были вокруг дольше, чем были.

    db.collection('users').doc(user.uid).set({
        username: "Username-156135",
        bio: "Add a bio",
        created: user.metadata.creationTime
    });

Правила восстановления огня:

 match /users/{id} {
  allow get;
  allow create, update: if request.resource.data.username is string &&
    request.resource.data.bio is string &&
    request.resource.data.created == request.auth.metadata.creationTime;
}

1 Ответ

1 голос
/ 20 февраля 2020

user.metadata.creationTime, в соответствии с документацией API - строка без документированного формата. Я предлагаю не использовать это. На самом деле то, что вы пытаетесь сделать, кажется невозможным, поскольку это значение недоступно в документации API для request.auth .

. Вместо этого я предлагаю использовать Firebase Auth onCreate запускает с облачными функциями, чтобы автоматически создавать этот документ с текущим временем в качестве правильной метки времени. Тогда, в правилах безопасности, я бы даже не дал пользователю возможность изменить это поле, так что вы можете быть уверены, что оно только когда-либо было точно установлено триггером. Вас может заинтересовать это решение в целом .

...