node.js - 生成自定义令牌的 firebase 函数出错
问题描述
我正在尝试实现为我的应用生成自定义令牌的 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'
};
});
});
解决方案
您的 Cloud Function 是HTTPS 的。为了终止它,您需要调用res.redirect()
,res.send()
或docres.end()
中的说明。
在您的代码中,您实际上返回了 Promises 链:这是终止由后台事件触发的云函数的正确方法(这不是由调用它公开的 URL 触发的 HTTPS 云函数的情况)。
因此,以下更改应该可以解决问题(未经测试):
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) => {...});
推荐阅读
- selenium - Robot Framework - 无法在 Kendo 网格中找到过滤器 xpath 并添加文本
- css - 如何将 css 模块样式传递给子组件
- oracle - TNSPING 响应时间
- flutter - 如何使用 Flutter 构建 iOS AdHoc 应用
- html - Cakephp 3 元素文件丢失
- c# - 带有 PostSharp.Diagnostics 的 NLog 缓冲包装器
- mysql - 包括主查询结果到子查询条件
- symfony - Symfony3.4 自定义命令
- twilio - 使用 Postman 添加对话参与者
- c# - 使用 XMLReader 解析糟糕的结构化文件