反应客户端代码-使用请求保证在标题中发送用户名和密码
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, …}
答案 0 :(得分:2)
根据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。
答案 1 :(得分:0)
似乎您正在发出HEAD请求而不是POST请求。更改为request.post()
,它应该可以工作