【问题标题】:Firebase Function Cannot set headers after they are sent to the clientFirebase功能在将标头发送到客户端后无法设置标头
【发布时间】:2021-04-05 01:10:51
【问题描述】:

当我试图从它说的客户端调用它时,我创建了一个 firebase 函数。将标头发送到客户端后无法设置标头。这是身份验证发布请求后我的后端错误。看起来标题有问题。

firebase 功能代码

import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';

import cors = require('cors');
const corsHandler = cors({ origin: true });

export const verifyToken = functions.https.onRequest(
    async (request: functions.Request, response: functions.Response) => {
        corsHandler(request, response, async function () {
            const bearerHeader = request.headers.authorization;
            if (!bearerHeader) {
                response.sendStatus(403);
            }
            try {
                const bearerToken = bearerHeader?.split(' ')[1];
                const decodedToken = await admin.auth().verifyIdToken(bearerToken || '');
                const customToken = await admin.auth().createCustomToken(decodedToken.uid)
                response.status(200).send(customToken);
            } catch (err) {
                response.sendStatus(404);
            }
        });
    },
);

客户端

 async verifyToken(token: string): Promise<void> {
    console.log(token)
    const firebase = FirebaseApiHelper.getInstance()
    const responseData = await firebase.request(
        "verifyToken",
        {},
        {
            "Content-Type": "application/json",
            Accept: "application/json",
            Authorization: "Bearer" +token,
        },
    )
    console.log(responseData)
}

【问题讨论】:

  • 请编辑问题以显示完整代码。我们看不到corsHandler 是什么。

标签: javascript node.js reactjs firebase google-cloud-functions


【解决方案1】:

您的函数代码未正确处理缺少的授权标头。在这种情况下,它将首先调用response.sendStatus(403),然后立即尝试通过调用response.status(200)response.sendStatus(404) 再次设置标题。

如果你想在发送 403 后结束处理,你应该早点退出函数,不要做其他事情:

            if (!bearerHeader) {
                response.sendStatus(403);
                return;
            }

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2021-06-18
    • 2019-01-23
    • 2022-01-14
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多