我似乎在从 firebase 云函数中的 fetch 调用中获取预期响应时遇到问题。我确信这是由于我对响应、承诺等如何运作缺乏了解。
我正在尝试将 atlassian crowd 的 rest api 用于 SSO。如果我使用邮递员,我可以从请求中得到想要的结果。所以我知道它的一部分是有效的。
导致我使用云功能的原因是使用 fetch 发出相同的请求会导致来自 localhost 的 CORS 问题。我想如果我可以将浏览器排除在外,那么 CORS 问题就会消失。他们有,但我没有得到想要的回应。
我的云函数如下所示:
const functions = require('firebase-functions');
const fetch = require('node-fetch');
const btoa = require('btoa');
const cors = require('cors')({origin:true});
const app_name = "app_name";
const app_pass = "app_password";
exports.crowdAuthentication = functions.https.onRequest((request, response)=>
{
cors(request, response, () =>{
let _uri = "https://my.server.uri/crowd/rest/usermanagement/1/session";
let _headers = {
'Content-Type':'application/json',
'Authorization':`Basic ${btoa(`${app_name}:${app_pass}`)}`
}
let _body = {
username: request.body.username,
password: request.body.password
}
const result = fetch(_uri, {
method: 'POST',
headers: _headers,
body: JSON.stringify(_body),
credentials: 'include'
})
response.send(result);
})
})
然后,我在我的应用程序中使用 fetch 到 firebase 端点并传递用户名/密码进行调用:
fetch('https://my.firebase.endpoint/functionName',{
method: 'POST',
body: JSON.stringify({username:"myusername",password:"mypassword"}),
headers: {
'Content-Type':'application/json'
}
})
// get the json from the readable stream
.then((res)=>{return res.json();})
// log the response - {size:0, timeout:0}
.then((res)=>
{
console.log('response: ',res)
})
.catch(err=>
{
console.log('error: ',err)
})
感谢您的关注。