Могу ли я создать федеративного пользователя в firebase вручную, используя аутентификацию администратора api?

У меня есть веб-приложение, созданное с использованием firebase. В моем веб-приложении у меня есть функция google, firebase, twitter signup/signin.

Теперь я хочу интегрировать это с агентом api.ai и иметь плавное соединение с аккаунтом. Следовательно, пользователи будут использовать свое домашнее/вспомогательное приложение googel с мобильных устройств для подключения к моему агенту. На этом этапе у меня будет идентификатор учетной записи google, адрес электронной почты google, имя пользователя.

Если пользователь уже присутствует, я могу отправить токены, необходимые моему агенту. Но если пользователь новый, я хочу создать учетную запись в своей базе данных firebase. Я не мог найти возможность создать федеративную учетную запись в firebase вручную (из nodejs application/cloud function)!

Я знаю, что есть возможность создать учетную запись электронной почты + фиктивный пароль, но это не то, что я ищу. Поскольку пользователь, зарегистрированный с помощью фиктивного пароля при попытке войти в мое веб-приложение, будет использовать свою функцию входа в Google.

Если я создаю адрес электронной почты и фиктивный пароль, поток не очень хорош, и я вынуждаю пользователей менять пароль и связывать свои учетные записи google снова, когда они приходят на мой веб-канал!

Существует подход CLI, где я могу импортировать пользователей из файла. Если это возможно, кто-то может помочь мне, как я могу это сделать в облачной функции?

Ответ 1

ЭТО НЕ ПОЛНЫЙ ОТВЕТ НА ВОПРОС

Основываясь на опции импорта инструментов firebase, я создал обрезанную структуру, используя которую я могу вызвать импорт из облачная функция. Единственный сбой, с которым я столкнулся, - это место, где я должен передать токен доступа для выполнения действия.

На данный момент я коротко замыкал метод getAccessToken внутри import/api.js. Это то место, где мне нужна помощь от команды Firebase, чтобы получить токен доступа прямо для администратора firebase или обойти проверку, когда запрос сделан из облачной функции!

getAccessToken: function() {
    return Promise.resolve({access_token: accessToken});
    // return accessToken ? RSVP.resolve({access_token: accessToken}) : require('./auth').getAccessToken(refreshToken, commandScopes);
  },

В приведенной выше функции прокомментированный код фактически получает выполняемый accessToken пользователь, выполняя firebase import из инструментов CLI. Как утилита командной строки, запрашивающая пользователя для получения разрешения, но при запуске внутри облачной функции это должен быть один из следующих вариантов, которые я мог бы придумать!

a), поскольку облачные функции выполняются внутри админ-предисловий, игнорируйте разрешения! b) или предоставить средства для получения токена доступа прямо из SDK администратора.

Суть присутствует здесь в github. Я взял большинство из них, как из проект инструментов firebase, и немного изменил его, чтобы он мог работать внутри cloudFunctions. Я старался как можно скорее принести минимальный код из инструментов firebase.

Когда я запускаю это, ошибки, которые я получаю, находятся по строке 35 lib/import/api.js:

<<< HTTP RESPONSE BODY 
{  
   "error":{  
      "errors":[  
         {  
            "domain":"global",
            "reason":"authError",
            "message":"Invalid Credentials",
            "locationType":"header",
            "location":"Authorization"
         }
      ],
      "code":401,
      "message":"Invalid Credentials"
   }
}