Кажется, у меня проблема с получением ожидаемого ответа от вызова извлечения в облачной функции Firebase. Я уверен, что это из-за моего недостатка знаний о том, как работают ответы, обещания и т. Д.
Я пытаюсь использовать Api Atlassian толпы для SSO. Если я использую почтальона, я могу получить желаемые результаты из запроса. Так что я знаю, что часть его работает.
Что привело меня к использованию облачной функции, так это то, что выполнение одного и того же запроса с использованием fetch приводило к проблемам с CORS на localhost. Я подумал, что если я смогу вывести браузер из уравнения, проблемы с 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 toконечная точка 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)
})
Спасибо за поиск.