Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity Firebase functions.https.onRequest调用错误始终为内部错误,并显示错误消息:响应不是有效的JSON对象_Firebase_Unity3d_Google Cloud Functions - Fatal编程技术网

Unity Firebase functions.https.onRequest调用错误始终为内部错误,并显示错误消息:响应不是有效的JSON对象

Unity Firebase functions.https.onRequest调用错误始终为内部错误,并显示错误消息:响应不是有效的JSON对象,firebase,unity3d,google-cloud-functions,Firebase,Unity3d,Google Cloud Functions,我试图在Unity中处理Firebase云函数错误,但我不能总是收到错误代码为“Internal”且错误消息为“Response is not valid JSON object”的错误 在阅读Firebase文档和其他一些堆栈溢出问题后,我了解到functions.https.onCall和functions.https.onRequest之间存在差异。我们目前正在使用onRequest,因为除了android和iOS之外,我们还需要从web访问这些功能 问题云代码: app.post("/t

我试图在Unity中处理Firebase云函数错误,但我不能总是收到错误代码为“Internal”且错误消息为“Response is not valid JSON object”的错误

在阅读Firebase文档和其他一些堆栈溢出问题后,我了解到functions.https.onCall和functions.https.onRequest之间存在差异。我们目前正在使用onRequest,因为除了android和iOS之外,我们还需要从web访问这些功能

问题云代码:

app.post("/test", (req, res) => {
    res.status(500).send("This message will never appear in the editor");
});

exports.app = functions.https.onRequest(app);

exports.ThisTestWorks = functions.https.onCall((data, context) => {
    throw new functions.https.HttpsError('invalid-argument', 'This message will appear in the editor');
});
'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');

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

const express = require('express');
const cookieParser = require('cookie-parser')();
const app = express();

admin.initializeApp();

const validateFirebaseIdToken = async (req, res, next) => {

    if ((!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) &&
        !(req.cookies && req.cookies.__session)) {
        console.error('No Firebase ID token was passed as a Bearer token in the Authorization header.',
            'Make sure you authorize your request by providing the following HTTP header:',
            'Authorization: Bearer <Firebase ID Token>',
            'or by passing a "__session" cookie.');
        res.status(403).send('Unauthorized');
        return;
    }

    let idToken;
    if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
        // Read the ID Token from the Authorization header.
        idToken = req.headers.authorization.split('Bearer ')[1];
    } else if(req.cookies) {
        // Read the ID Token from cookie.
        idToken = req.cookies.__session;
    } else {
        // No cookie
        res.status(403).send('Unauthorized');
        return;
    }

    try {
        const decodedIdToken = await admin.auth().verifyIdToken(idToken);
        req.user = decodedIdToken;
        next();
        return;
    } catch (error) {
        console.error('Error while verifying Firebase ID token:', error);
        res.status(403).send('Unauthorized');
        return;
    }
};

app.use(cors);
app.use(cookieParser);
app.use(validateFirebaseIdToken);

app.post("/test", (req, res) => {
    res.status(500).send("This message will never appear in the editor");
});

exports.ThisTestFails = functions.https.onRequest(app);

exports.ThisTestWorks = functions.https.onCall((data, context) => {
    throw new functions.https.HttpsError('invalid-argument', 'This message will appear in the editor');
});
统一代码:

FirebaseProcess retVal = new FirebaseProcess();
FunctionInst.GetHttpsCallable("app/test").CallAsync(request).ContinueWith(t => {
    if (t.IsFaulted || t.IsCanceled) {
        foreach (var inner in t.Exception.InnerExceptions) {
            if (inner is FunctionsException) {
                var e = (FunctionsException) inner;
                Debug.Log("e.ErrorCode: " + e.ErrorCode + ", e.Message: " + e.Message);
            } else {
                Debug.Log("inner.Message: " + inner.Message);
            }
        }
        Debug.Log("t.Exception.Message " + t.Exception.Message);
        Debug.Log("t.Status " + t.Status);

    } else {
        retVal.Success = true;
        retVal.ResultJSON = t.Result.Data as string;
    }
    retVal.IsRunning = false;
});
此代码将返回以下日志:

e.ErrorCode: Internal, e.Message: Response is not valid JSON object.
t.Exception.Message One or more errors occurred.
t.Status Faulted
完整(相关)云代码:

app.post("/test", (req, res) => {
    res.status(500).send("This message will never appear in the editor");
});

exports.app = functions.https.onRequest(app);

exports.ThisTestWorks = functions.https.onCall((data, context) => {
    throw new functions.https.HttpsError('invalid-argument', 'This message will appear in the editor');
});
'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');

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

const express = require('express');
const cookieParser = require('cookie-parser')();
const app = express();

admin.initializeApp();

const validateFirebaseIdToken = async (req, res, next) => {

    if ((!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) &&
        !(req.cookies && req.cookies.__session)) {
        console.error('No Firebase ID token was passed as a Bearer token in the Authorization header.',
            'Make sure you authorize your request by providing the following HTTP header:',
            'Authorization: Bearer <Firebase ID Token>',
            'or by passing a "__session" cookie.');
        res.status(403).send('Unauthorized');
        return;
    }

    let idToken;
    if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
        // Read the ID Token from the Authorization header.
        idToken = req.headers.authorization.split('Bearer ')[1];
    } else if(req.cookies) {
        // Read the ID Token from cookie.
        idToken = req.cookies.__session;
    } else {
        // No cookie
        res.status(403).send('Unauthorized');
        return;
    }

    try {
        const decodedIdToken = await admin.auth().verifyIdToken(idToken);
        req.user = decodedIdToken;
        next();
        return;
    } catch (error) {
        console.error('Error while verifying Firebase ID token:', error);
        res.status(403).send('Unauthorized');
        return;
    }
};

app.use(cors);
app.use(cookieParser);
app.use(validateFirebaseIdToken);

app.post("/test", (req, res) => {
    res.status(500).send("This message will never appear in the editor");
});

exports.ThisTestFails = functions.https.onRequest(app);

exports.ThisTestWorks = functions.https.onCall((data, context) => {
    throw new functions.https.HttpsError('invalid-argument', 'This message will appear in the editor');
});
“严格使用”;
const functions=require('firebase-functions');
const admin=require('firebase-admin');
const cors=require('cors')({origin:true});
const express=require('express');
const cookieParser=require('cookie-parser')();
常量app=express();
admin.initializeApp();
const VALIDATEFIREASEIDTOKEN=异步(请求、恢复、下一步)=>{
if((!req.headers.authorization | |!req.headers.authorization.startsWith('Bearer'))&&
!(请求cookies和请求cookies.\uuu会话)){
console.error('授权标头中没有作为承载令牌传递Firebase ID令牌。',
'请确保通过提供以下HTTP标头来授权您的请求:',
“授权:持票人”,
'或通过传递一个“uu会话”cookie.”);
res.status(403).发送(“未授权”);
返回;
}
让idToken;
if(req.headers.authorization&&req.headers.authorization.startsWith('Bearer')){
//从授权标头读取ID令牌。
idToken=req.headers.authorization.split('Bearer')[1];
}else if(请求cookies){
//从cookie中读取ID令牌。
idToken=请求cookies.\uuuu会话;
}否则{
//没有饼干
res.status(403).发送(“未授权”);
返回;
}
试一试{
const decodedIdToken=wait admin.auth().verifyIdToken(idToken);
req.user=decodedIdToken;
next();
返回;
}捕获(错误){
console.error('验证Firebase ID令牌时出错:',错误);
res.status(403).发送(“未授权”);
返回;
}
};
应用程序使用(cors);
应用程序使用(cookieParser);
应用程序使用(ValidateFireBaisedToken);
应用程序发布(“/test)”,(请求、回复)=>{
res.status(500).send(“此消息将永远不会出现在编辑器中”);
});
exports.ThisTestFails=functions.https.onRequest(app);
exports.ThisTestWorks=functions.https.onCall((数据、上下文)=>{
抛出新函数.https.HttpsError('invalid-argument','此消息将出现在编辑器中');
});
在Unity编辑器中这不会返回自定义错误是有原因的吗?我错过了什么

提前谢谢