Я пытаюсь создать нового пользователя в firebase через поставщика аутентификации Google либо автоматически, либо нажатием кнопки в надстройке боковой панели в листах Google. Причина в том, что мне нужно получить зарегистрированный uid для пользователя, чтобы данные, которые я отправляю с листов, можно было отнести к этому пользователю.
Самое близкое к учебнику, которое я нашел, это это, но я застреваю при попытке импортировать firebase.
Один метод, который я часто вижу, — это импортировать его через тег script в html для боковой панели листов.
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<script>
// Initialize Firebase
var config = {
apiKey: '...,
authDomain: '...',
databaseURL: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '...'
};
firebase.initializeApp(config);
</script>
</body>
</html>
Однако, когда я пытаюсь использовать переменную firebase в моем сценарии .gs, она не определена. Как я могу сделать его доступным для сценария?
Другой метод, который я видел, — это использование eval
и URLFetchApp
в скрипте gs.
eval(UrlFetchApp.fetch("https://www.gstatic.com/firebasejs/5.9.2/firebase.js").getContentText());
Это приводит к SyntaxError: Missing name after . operator.
Я думаю, это потому, что эта библиотека не предназначена для работы на узле js.
Я понимаю, что admin sdk для firebase предназначен для node js, но вы не можете создать пользователя с определенным провайдером с помощью этого метода (афаик). Также я не уверен, как бы я импортировал его в скрипт приложений Google. Кроме того, я хочу, чтобы пользователь взаимодействовал с селектором учетной записи Google после запуска процесса создания пользователя.
Есть ли у кого-нибудь предложения о том, как это сделать?
На самом деле довольно легко создавать новых пользователей в Firebase из таблицы Google, используя файл REST API аутентификации Firebase.
Вы должны отправить запрос HTTP POST
к конечной точке Auth signupNewUser
, см. подробный документ здесь: https://firebase.google.com/docs/reference/rest/auth/#section-create-email-password
Для этого вы будете использовать метод fetch()
класса URLFetchApp()
в своем скрипте gs следующим образом:
function createUser() {
const userName = "[email protected]";
const pwd = "xyz987";
const createUserUrl = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=[API_KEY]" //Replace with your Web API Key
const payload = JSON.stringify({"email": userName, "password": pwd, "returnSecureToken": true});
const createUserResponse = UrlFetchApp.fetch(createUserUrl, {
method: 'post',
contentType: 'application/json',
muteHttpExceptions: true,
payload : payload
});
Logger.log(JSON.parse(createUserResponse));
}
Вы получите ключ веб-API для своего проекта Firebase на странице настроек проекта в консоли администратора Firebase.
На самом деле это похоже на то, что я хочу - firebase.google.com/docs/reference/rest/auth/… Что-то вроде этого должно работать правильно? curl 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?key=[API_KEY]' \ -H 'Content-Type: application/json' \ --data-binary '{"postBody":"id_token=[GOOGLE_ID_TOKEN]&providerId=[google.com]","requestUri":"[http://localhost]","returnIdpCredential":true,"returnSecureToken":true}'
@rt_ Не знаю, я никогда не пробовал эту конечную точку. Я мог бы, может быть, посмотреть завтра, мне уже поздно, и я действительно иду спать! Но я уверен, что вы найдете свой путь с документацией.
Хорошо, НП, я близок к тому, чтобы заставить его работать, так что не беспокойтесь. Я использую описанный выше метод с официальной библиотекой OAuth2 скриптов приложений. Спасибо Рено!
Интересно, не могли бы вы расширить это, чтобы позволить пользователю создать учетную запись через свою учетную запись Google (поставщик Google Auth)? Если бы я мог заставить это работать через остальные API, то, думаю, я был бы в пути!