Облачные функции для Firebase: "400, изменение типа триггера функции или поставщика событий не допускается"
Когда я бегу firebase-deploy
Я получаю это сообщение об ошибке:
functions: HTTP Error: 400, Change of function trigger type or event provider is not allowed
В моем контроллере под onAuthStateChanged
Я собираю user.uid
и затем обновите его до базы данных, когда пользователь входит в систему. Этот код работает нормально:
firebase.auth().onAuthStateChanged(function(user) { // this runs on login
if (user) { // user is signed in
console.log("User signed in!");
$scope.authData = user;
firebase.database().ref('userLoginEvent').update({'user': user.uid}); // update Firebase database to trigger Cloud Function to get a new IBM Watson token
} // end if user is signed in
else { // User is signed out
console.log("User signed out.");
}
});
Вот моя облачная функция. Он предназначен для запуска при входе пользователя, который обновляет местоположение в базе данных Firebase. Затем функция отправляет HTTP-запрос в IBM Watson для получения токена, а затем записывает токен в файл. Функция работает правильно с узла. Триггер, кажется, проблема.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const request = require('request'); // node module to send HTTP requests
const fs = require('fs');
admin.initializeApp(functions.config().firebase);
exports.getWatsonToken = functions.database.ref('userLoginEvent').onUpdate(event => { // authentication trigger when user logs in
var username = 'groucho',
password = 'swordfish',
url = 'https://' + username + ':' + password + '@stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api';
request({url: url}, function (error, response, body) {
var tokenService = "app.value('watsonToken','" + body + "');";
fs.writeFile('../public/javascript/services/watsonTokenValue.js', tokenService, (err) => {
if (err) throw err;
console.log('The file has been saved!');
}); // close fs.writeFile
}); // close request
}); // close getWatsonToken
4 ответа
Решением этой проблемы является комментирование или отключение вашей функции, а затем сохранение файла функций и его развертывание. Функция будет удалена в Firebase, но после этого вы можете вставить / раскомментировать свою функцию, и она снова будет нормально развернута. Эта ошибка возникает, когда вы берете функцию и изменяете тип триггера, который она использует, то есть HTTP, базу данных или аутентификацию.
Сначала вырежьте
/* exports.yourFunction = someTrigger... */
А затем, после развертывания ("развертывание firebase"), замените ваш триггер
exports.yourFunction = anotherTrigger...
Это может быть легче сделать с помощью functions:delete
команда:
firebase functions:delete yourFunction
Документация также содержит более продвинутые варианты использования.
Вы также можете перейти на панель "Облачные функции" в консоли Google Cloud Platform и удалить свою функцию оттуда. После этого вы можете загрузить функцию в обычном режиме из Firebase CLI. Не уверен, почему у них нет функции удаления в консоли Firebase.
Более того, теперь у вас есть возможность скопировать существующую функцию в консоли Google. Вам нужно только изменить имя и раздел триггера, все остальное будет таким же, как и старая функция.