javascript - google - Funciones de la nube para el error de Firebase: "400, no se permite el cambio del tipo de activaciĆ³n de la funciĆ³n o el proveedor de eventos"
firebase functions express (2)
Cuando ejecuto firebase-deploy
me firebase-deploy
este mensaje de error:
functions: HTTP Error: 400, Change of function trigger type or event provider is not allowed
En mi controlador, en onAuthStateChanged
, onAuthStateChanged
el user.uid
y luego lo actualizo a una ubicación de la base de datos cuando un usuario inicia sesión. Este código funciona bien:
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.");
}
});
Aquí está mi función de nube. Está destinado a activarse cuando un usuario inicia sesión, lo que actualiza una ubicación en la base de datos de Firebase. La función luego envía una solicitud HTTP a IBM Watson para obtener un token, luego escribe el token en un archivo. La función se ejecuta correctamente desde el nodo. El disparador parece ser el problema.
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
Básicamente, la solución es comentar o eliminar su función y luego guardar el archivo de Funciones y desplegar. La función se eliminará en Firebase, pero después de eso puede insertar / descomentar su función y se implementará de nuevo. Este error se produce cuando toma una función y cambia el tipo de activador que utiliza, es decir, HTTP, base de datos o autenticación.
En primer lugar cortarlo
/* exports.yourFunction = someTrigger... */
Y luego, después de la implementación ("implementación de base de fuego") reemplace su disparador
exports.yourFunction = anotherTrigger...
Esto se puede hacer más fácilmente usando las functions:delete
comando de functions:delete
:
firebase functions:delete yourFunction
La documentación presenta casos de uso más avanzados también.
También puede ir al panel de Funciones de la nube en la consola de la Plataforma de la nube de Google y eliminar la función desde allí. Después de eso, puede cargar la función normalmente desde el CLI de base de fuego. No estoy seguro de por qué no tienen una opción de función de eliminación en la consola firebase.