如何将值从谷歌云函数(firebase)传递到前端?
Posted
技术标签:
【中文标题】如何将值从谷歌云函数(firebase)传递到前端?【英文标题】:How can i pass values from google cloud function (firebase) to front end? 【发布时间】:2019-12-16 05:56:22 【问题描述】:我目前正在使用 vuejs 和 firebase 构建一个应用程序,以在此应用程序中获取新用户,只有管理员权限的用户才能执行此任务。因此,在 Admin sdk 和云功能的帮助下,我设法弄清楚了如何从前端触发云功能。它自己的功能做了两件事: 1)在认证部分创建用户。 2) 在云 Firestore 数据库中添加用户 ID 为 documentid 的新用户。 (/users/$(userid))
这部分效果很好。我现在唯一缺少的是后端将最近创建的用户的用户 ID 返回到前端。
我尝试通过将 .then() 放在云函数代码中的 db.collection 之后并将 .then(result => 放在我的代码的前端中来实现它。
云功能代码
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.createNewUser = functions.https.onCall((data, context) =>
return admin.auth().createUser(
email: data.email,
displayName: data.name,
password: '123456',
emailVerified: true,
disabled: false
)
.then(() =>
return admin.auth().getUserByEmail(data.email)
.then(user =>
db.collection('users').doc(user.uid).set(
mail: user.email,
name: user.displayName
)
.then(() =>
return user.uid
);
);
);
);
前端代码
methods:
addNewUser()
const createNewUser = firebase.functions().httpsCallable('createNewUser');
createNewUser(email: 'test@testing.com', name: 'testName')
.then(result =>
console.log(result)
)
在控制台中我得到一个数组 data: null。
【问题讨论】:
【参考方案1】:您应该了解 Promises 和 Async 函数。
见:
https://developers.google.com/web/fundamentals/primers/promises https://developer.mozilla.org/ja/docs/Web/javascript/Reference/Global_Objects/Promise https://developers.google.com/web/fundamentals/primers/async-functions https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function你的代码是这样使用 async/await 的。
试试下面的代码。
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
const db = admin.firestore();
exports.createNewUser = functions.https.onCall(async (data, context) =>
const user = await admin.auth().createUser(
email: data.email,
displayName: data.name,
password: "123456",
emailVerified: true,
disabled: false
);
await db
.collection("users")
.doc(user.uid)
.set(
mail: user.email,
name: user.displayName
);
return user.uid;
);
【讨论】:
工作就像一个魅力,我绝对需要了解更多关于异步/等待功能。谢谢!【参考方案2】:我认为你应该尝试使用 cors npm = https://www.npmjs.com/package/cors。
const cors = require('cors')(
origin: true
)
exports.foo = functions.https.onRequest((req, res) =>
cors(req, res, () =>
//your process
.then(user =>
res.status(200).send(user.uid)
)
.catch(err =>
res.status(500).send(err)
)
)
)
【讨论】:
以上是关于如何将值从谷歌云函数(firebase)传递到前端?的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从 javascript 函数传递到 django 视图