具有基本身份验证的Google Cloud Function无法正常工作

反应客户端代码-使用请求保证在标题中发送用户名和密码

var password = values.password;
  var email = values.email;
request
        .head(
          "https://us-central1-simplineet-754e8.cloudfunctions.net/CreateUserauth"
        )
        .set('Content-Type','application/x-www-form-urlencoded')
        .auth(email,password,false)
        .query(dataobj)
        .then(res => {
          console.log(res);
          if (res.statusCode === 200) {
            console.log("statusText",res.body);

          } else {
            console.log("statusText",res.statusText);

          }
        })
        .catch(err => {});

后端-Google Cloud功能可以处理来自客户端的基本身份验证请求

   const express = require('express');
    const app = express();
    const cors = require('cors');
    app.use(cors({origin: true}));

    exports.CreateUserauth = functions.https.onRequest((request,response) => {
     var corsFn = cors();
     corsFn(request,response,function ()  {
        // Request Header
            response.setHeader('access-Control-Allow-Methods','GET,POST,OPTIONS,PUT,PATCH,DELETE');
            response.setHeader('access-Control-Allow-Headers','X-Requested-With,content-type');
            response.setHeader('access-Control-Allow-Credentials',true);
            response.setHeader('access-control-allow-origin','*');


        var auth = require('basic-auth') // basic-auth NPM  package to extract username and password from header
        var user = auth(request)  
        var email = user.name; // Getting username from Auth
        var password = user.pass; // Getting password from Auth
        var username = request.query.username;

        response.send('Hello from Firebase!');  // Not getting this response in Client 
     });

    });

响应进入客户端:

Response {req: Request,xhr: XMLHttpRequest,text: null,statusText: "",statusCode: 200, …}
a72137110 回答:具有基本身份验证的Google Cloud Function无法正常工作

根据MDN docs,HEAD响应不应包含正文:

  

如果将使用HTTP GET方法请求指定的资源,则HTTP HEAD方法请求返回的标头。例如,可以在决定下载大量资源以节省带宽之前完成此请求。

     

对HEAD方法的响应不应包含主体。如果是这样,则必须忽略它。即使这样,在响应中也可以包含描述正文内容的实体标头,例如Content-Length。它们与HEAD响应的主体(应该为空)无关,但是与使用GET方法的类似请求的主体有关,将作为响应返回。

我的猜测是,GCP将其作为GET处理,并在返回响应之前剥离了正文。 但是,请记住,Google Cloud Functions HTTP trigger docs并未明确指出HEAD是受支持的方法:

  

您可以使用POST,PUT,GET,DELETE和OPTIONS HTTP方法通过HTTP请求调用Cloud Functions。

,

似乎您正在发出HEAD请求而不是POST请求。更改为request.post(),它应该可以工作

本文链接:https://www.f2er.com/3059773.html

大家都在问