【问题标题】:I got error forbidden when I using cloud functions and express routing使用云功能和快速路由时出现错误禁止
【发布时间】:2017-09-28 16:40:21
【问题描述】:

我使用 Firebase 托管来构建 REST API,但我遇到了 URL 路由问题。

这是一个运行良好的示例:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'; 
import * as express from 'express';
admin.initializeApp(functions.config().firebase)
const app = express();

//  /user
export const user = functions.https.onRequest(async (req, res) => {
    res.setHeader('Content-Type', 'application/json');
    console.log("app", app)
    return res.send({
        name: "Leon",
        age: 23
    })
});

/用户响应: { 名称:“莱昂”, 年龄:23 }

这是我使用 express 进行动态 URL 路由的示例: Example resource

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'; 
import * as express from 'express';
admin.initializeApp(functions.config().firebase)
const app = express();

app.get('/', (req, res) => {  
    res.send('Root page');
});

app.get('/second', (req, res) => {  
    res.send('Sub function');
});

app.get('/hello/:name', (req, res) => {  
    res.send(`Hello ${req.params.name}`);
});

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

/响应 => 错误:禁止 您的客户端无权从该服务器获取 URL /。

/second response => 错误:禁止 您的客户端无权从此服务器获取 URL /second。

/hello/johndoe 响应 => 错误:禁止 您的客户端无权从此服务器获取 URL /hello/johndoe。

【问题讨论】:

    标签: node.js express firebase url-routing google-cloud-functions


    【解决方案1】:

    尝试使用 Express 中间件是 cors。

    import * as functions from 'firebase-functions';
    import * as admin from 'firebase-admin'; 
    import * as express from 'express';
    admin.initializeApp(functions.config().firebase)
    const cors = require('cors')({origin: true});
    const app = express();
    
    app.use(cors);
    
    app.get('/', (req, res) => {  
        res.send('Root page');
    });
    
    app.get('/second', (req, res) => {  
        res.send('Sub function');
    });
    
    app.get('/hello/:name', (req, res) => {  
        res.send(`Hello ${req.params.name}`);
    });
    
    exports.route = functions.https.onRequest(app);
    

    【讨论】:

      【解决方案2】:

      必须在您的 GCP Console 中解决。只需按照以下步骤操作:

      1. 转到您的GCP Console 并登录
      2. 在顶部菜单中,选择相应的 Firebase 项目
      3. 在左侧菜单中转到 Cloud Functions
      4. 点击函数的复选框(不是函数的名称)
      5. 选择后,在右侧菜单中选择“添加成员”
      6. 在“新成员”中输入 allUsers
      7. 在选择函数栏上,选择云函数 -> 云函数调用程序
      8. 点击“保存”,然后在弹出警告中点击“允许公共访问” 一切顺利!

      【讨论】:

        猜你喜欢
        • 2020-01-03
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多