我正在尝试实现一个Firebase函数,该函数为我的应用程序生成自定义令牌。但我不断收到以下错误消息:
错误:无法处理请求
否则会超时。
你知道以后我的代码可能出了什么问题吗?我正在用"测试"uid进行尝试。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const serviceAccount = require('./serviceAccountKey.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
exports.customFunction = functions.https.onRequest((data, context) => {
return admin.auth().createCustomToken('test')
.then(customToken => {
console.log(`The customToken is: ${customToken}`);
return {
status: 'success',
customToken: customToken
};
})
.catch(error => {
console.error(`Something happened buddy: ${error}`)
return {
status: 'error'
};
});
});
您的云功能是HTTPS功能。为了终止它,您需要调用res.redirect()
、res.send()
或res.end()
,如文档中所述。
在您的代码中,您实际上返回了Promises链:这是终止由后台事件触发的云函数的正确方式(HTTPS云函数不是由对其公开的URL的调用触发的(。
因此,以下更改应该起作用(未经测试(:
exports.customFunction = functions.https.onRequest((req, res)(data, context) => {
admin.auth().createCustomToken('test') // No need to return
.then(customToken => {
console.log(`The customToken is: ${customToken}`);
response.status(200).send({
status: 'success',
customToken: customToken
});
})
.catch(error => {
console.error(`Something happened buddy: ${error}`)
response.status(500).send(error);
});
});
请注意,对于HTTPS云函数,传递给处理程序的对象不是Firebasedata
和context
对象,而是Express.jsrequest
和response
对象。
所以写更清楚
exports.customFunction = functions.https.onRequest((req, res) => {...});
而不是
exports.customFunction = functions.https.onRequest((data, context) => {...});