Могу ли я создать федеративного пользователя в firebase вручную с помощью API аутентификации администратора?
У меня есть веб-приложение, созданное с использованием FireBase. В моем веб-приложении есть функции Google, Firebase, Twitter для регистрации / входа.
Теперь я хочу интегрировать это с моим агентом api.ai и иметь бесшовную связь с аккаунтом. Следовательно, пользователи будут использовать приложение googel Home / assistant с мобильных устройств для подключения к моему агенту. На этом этапе у меня будет идентификатор учетной записи Google, адрес электронной почты Google, имя пользователя.
Если пользователь уже присутствует, я могу отправить токены, требуемые моим агентом. Но если пользователь новый, я хочу создать учетную запись в моей базе данных Firebase. Я не смог найти возможность создать федеративную учетную запись в firebase вручную (из приложения / облачной функции nodejs)!
Я знаю, что есть возможность создать учетную запись с паролем электронной почты и фиктивного пароля, но это не то, что я ищу. Поскольку пользователь, зарегистрировавшийся с фиктивным паролем при попытке войти в мое веб-приложение, будет использовать свою функцию входа в 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. Как утилита командной строки, запрашивая у пользователя разрешение, работает, но при запуске внутри облачной функции это должен быть один из следующих вариантов, который я мог бы обдумать!
а) поскольку облачные функции выполняются в пределах привилегий администратора, игнорируйте разрешения! б) или предоставить средства для получения токена доступа прямо из административного SDK.
Суть здесь в github. Я взял большую часть из проекта Firebase Tools и немного подправил его, чтобы он работал в рамках cloudFunctions. Я попытался принести как можно меньше кода из firebase-tools.
Когда я запускаю это, ошибки, которые я получаю, находятся в строке 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"
}
}