Добавить пользователя консоли Firebase с разрешением добавлять пользователей Auth, но не удалять базу данных

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

Я пытался добавить их через "Пользователи и разрешения", но не смог найти роли, подходящие для добавления пользователей при аутентификации и без разрешения записи в базе данных.

На данный момент я добавил их в качестве редактора проектов, но мне это неудобно.

1 ответ

Предоставление доступа администратора к панели инструментов вашего приложения, вероятно, не является правильным решением для администрирования пользователей внутри приложения. Это может быть даже риск для безопасности. На мой взгляд, это эквивалентно предоставлению пользователям вашего приложения доступа к вашему физическому серверу через приглашение оболочки вместо создания API для их вызова.

Лучшей альтернативой в этом случае будет настройка конечной точки Google Cloud Functions, которая будет принимать запросы API и создавать пользователей от их имени, проверяя их права доступа по некоторым критериям, которые вы определите.

1) Включить и развернуть облачные функции

2) Установите аутентифицированную конечную точку HTTPS

3) Код функции для создания нового пользователя будет выглядеть примерно так:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const express = require('express');
const cookieParser = require('cookie-parser')();
const cors = require('cors')({origin: true});
const app = express();

// See https://github.com/firebase/functions-samples/blob/Node-8/authorized-https-endpoint/functions/index.js
const validateFirebaseIdToken = require('./validateFirebaseIdToken');

app.use(cors);
app.use(cookieParser);
app.use(validateFirebaseIdToken);
app.get('/createUser', (req, res) => {

  const userData = req.params;

  // This represents some criteria you set for determining who can call this endpoint
  // possible a list of approved uids in your database?
  if( req.user.uid !== VALID_ADMIN_USER ) {
    res.status(401).send('Unauthorized');
    return;
  }

  // See https://firebase.google.com/docs/auth/admin/manage-users#create_a_user

  admin.auth().createUser({
    email: userData.email,
    displayName: userData.name,
    ...
  })
    .then(function(userRecord) {
      // See the UserRecord reference doc for the contents of userRecord.
      res.json({result: 'success', uid: userRecord.uid});
      console.log("Successfully created new user:", userRecord.uid);
    })
    .catch(function(error) {
      console.error("Failed to create new user");
      console.error(error);
      res.status(500).json({status: 'error', error: 'Unable to process the request'});
    });

});

// This HTTPS endpoint can only be accessed by your Firebase Users.
// Requests need to be authorized by providing an `Authorization` HTTP header
// with value `Bearer <Firebase ID Token>`.
exports.app = functions.https.onRequest(app);

4) Предоставьте клиенту конечную точку API или создайте элементарный веб-интерфейс приложения, который они могут использовать для вызова этой конечной точки.

Перейдите на облачную платформу Google (из консоли Firebase) и выберите "Управление ролями", из которой вы можете создавать Custom roles,

Обратите внимание, что пользовательские роли в настоящее время находятся в бета-версии, и вы, возможно, не сможете достичь того, что вам нужно, но, как показывают документы:

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

Другие вопросы по тегам