Разрешить вызов функции Firebase только пользователям с конкретными пользовательскими утверждениями - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть эта функция, которая устанавливает пользовательские утверждения для пользователя:

export const setUserClaims = functions.https.onRequest((req, res) => {
  return admin.auth().setCustomUserClaims(req.body.uid, req.body.claims);
});

Я хочу, чтобы эта функция была доступна только для пользователей, которые являются супер-администратором, то есть пользовательские утверждения, состоящие из {admin: true}.

Таким образом, admin может устанавливать заявки пользователей для сотрудников службы поддержки, например, вызывая эту функцию.

Я искал, но не нашел очевидного ответа на этот вопрос, которыйна 100% надежный и безопасный.

Как я могу это сделать?

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете создать облачную функцию HttpsCallable, чтобы она автоматически получала аутентифицированного пользователя от клиента и помещала его вместе с другой информацией в объект context.auth.

Функция может выглядеть примерно так:

async function myFunctionImpl(params, context) {

    if (!context.auth.token.admin) {
        throw new HttpsError('permission-denied');
    }
    // function code
}

export const myFunction = functions.https.onCall(myFunctionImpl);

Для его вызова вы можете использовать функции client.Это пример для сети:

await firebase
      .functions()
      .httpsCallable("myFunction")({example: "hello"});

Таким образом, если вы аутентифицируете пользователя на клиенте, он передаст аутентификацию функции.

...