Node.js 如何确保firebase中的getUserProfile cloud函数仅在登录用户';s会话请求它吗?

Node.js 如何确保firebase中的getUserProfile cloud函数仅在登录用户';s会话请求它吗?,node.js,firebase-realtime-database,firebase-authentication,google-cloud-functions,Node.js,Firebase Realtime Database,Firebase Authentication,Google Cloud Functions,我有一个名为getUserProfile的云函数,它如下所示: exports.getUserProfile = functions.https.onRequest((request, res) => { try { const username = request.body.username || request.query.username; if (username == null || username.length == 0) return

我有一个名为
getUserProfile
的云函数,它如下所示:

exports.getUserProfile = functions.https.onRequest((request, res) => {
    try {
        const username = request.body.username || request.query.username;
        if (username == null || username.length == 0) return res.send('{"status":"error","errorMessage":"No username Provided."}');

        admin.database().ref().child("users").orderByChild("username").equalTo(username).once('value', snapshot => {
            if (!snapshot.exists()) return res.send(`{"status":"error","message":"invalid-profile"}`);
            
            snapshot.forEach(function(child) {
                const id = child.val().id;
                admin.database().ref('users/' + id).once('value', snapshot => {
                    if (!snapshot.exists()) return res.send('{"status":"error","errorMessage":"user not found."}');

                    let userData = {}
                    userData.username = snapshot.val().username || "N/A";
                    userData.name = snapshot.val().name || "N/A";
                    userData.email = snapshot.val().email || "N/A";

                    admin.database().ref('uploads').orderByChild('createdBy').equalTo(id).once('value', snapshot => {
                        userData.content = {};
                        const filePromise = [];
                        snapshot.forEach(function(child) {
                            let content = {};
                            content.id = child.key;
                            content.val = child.val();
                            content.val.files.forEach(function(fileId) {
                                filePromise.push(admin.database().ref().child("files").child(fileId.fileId).once("value"));
                            });

                            userData.content[child.key] = content;
                            userData.content[child.key].files = [];
                        });
                        Promise.all(filePromise).then(results => {
                            results.forEach((result => {
                                const uploadId = result.val().uploadId;
                                const thumbDownloadURL = result.val().thumbDownloadURL;
                                userData.content[uploadId].files.push(thumbDownloadURL);
                            }));
                            res.send(`{"status":"ok","userdata":${JSON.stringify(userData)}}`);
                        });
                    });

                });
            });

        });
    } catch (err) {
        res.send(`{"status":"error","message":"${err}"}`);
    }
});

我使用此函数获取用户配置文件的详细信息,并将其呈现在视图上。但是,如果有人在发送{“username”:“xxx”}JSON内容的同时发出请求,那么函数仍然返回数据,这是一种违反安全性的行为,这是预期的行为。如何确保只有登录的用户才能获取数据?

您应该使用JWT身份验证来验证希望从firebase云功能请求数据的用户。因此,当用户首次注册时,令牌被分配给该用户(在需要时可以续订或撤销),然后每当该用户想要请求数据时,他们都需要通过向请求头添加身份验证来发送令牌:Bearer+UserJWToken。然后在云函数方面,您可以验证该令牌和

以下是一些有助于此主题的链接: