首页 > 解决方案 > Angular 8 + @angular/fire onCall 函数没有 CORS 标头存在错误

问题描述

我在多区域“欧洲西部”中有 Firebase 托管,在“欧洲西部 1”中有 Firebase 功能。onRequest 函数似乎工作正常,但我所有的 onCall 函数都会抛出通用 CORS 错误:

 No 'Access-Control-Allow-Origin' header is present on the requested resource.

日志中没有任何用处。

函数示例:

export const ADMIN01AddStaffClaim = functions
    .region('europe-west1')
    .https.onCall((data, context) => {
        if (context.auth) {
            if (context.auth.token.owner !== true) {
                let error = new HttpsError('permission-denied', 'You must be an app owner to add staff claims');
                return { error };
            } else {
                const email = data.email;
                return grantClaim(email, 'staff')
                    .then(() => {
                        return { result: 'Added ' + 'staff' + ' claim to ' + email };
                    })
                    .catch(err => {
                        console.log(err);
                        let error = new HttpsError(
                            'permission-denied',
                            'You must be an app owner to add staff claims'
                        );
                        return { error };
                    });
            }
        } else {
            let error = new HttpsError('permission-denied', 'You must be an app owner to add staff claims');
            return { error };
        }
    });

我试过使用 express 的 cors,但从我在文档中读到的内容来看,它不适用于可调用函数。

编辑:对于删除 angular 标签并添加 javascript 的人,我的代码中几乎到处都有打字稿,这是一个来自 angular 的问题,通过正常的浏览器请求工作。

EDIT2:错误被抛出不是因为实际的CORS问题,而是因为我的功能完全是狗屎。

标签: angularfirebasegoogle-cloud-functionsangularfire2

解决方案


我没有从我的函数中正确返回内容,并且默认情况下,CORS 错误似乎是浏览器发出 OPTIONS 请求时的第一个故障点。如果不是因为 CORS 错误,那么当我调用该函数时,这将是一个实际的 500 Internal Server Error。


推荐阅读