gpt4 book ai didi

javascript - Firebase 的云功能陷入无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:03 26 4
gpt4 key购买 nike

我有一个自定义逻辑来验证用户。

我已经为 Firebase 编写了一个 Cloud Function 并验证自定义 token 。

问题是云函数没有被终止并且正在进入无限循环,直到 Firebase 终止该函数

无论是匹配场景还是非匹配场景,云函数都会陷入无限。

下面是代码:

/*  CLOUD FUNCTION */
exports.verifyToken = functions.https.onRequest((req, res) => {

var corsFn = cors();
corsFn(req, res, function () {
verifyTheUserToken(req, res);

});
});


function verifyTheUserToken(req, res) {


if (!req.headers.authorization || !req.headers.authorization.startsWith('Bearer ')) {
console.error('No Firebase ID token was passed as a Bearer token in the Authorization header.');
res.status(403).send('Unauthorized');
}

const firebaseToken = req.headers.authorization.split('Bearer ')[1];
const userId = req.body.uid;
const receievedToken = req.body.token;

return admin.auth().verifyIdToken(firebaseToken).then(decodedFirebaseToken => {
console.log('ID Token correctly decoded', decodedFirebaseToken);
console.log('req', req.body);
return 'sucess';

}).then(function (receivedValues) {

return admin.database().ref().child('userTokens').child(userId).child('token').once('value');

}).then(function (snapshot) {

if (!snapshot.val()) {
return Promise.reject('token is not set ');
}

if (snapshot.val() != receievedToken) {
return Promise.reject('token doesnt match');
}

return 'verified';

}).then(function (success) {

return admin.database().ref().child('users').child(userId).child('isVerified').set(true);

}).then(function (success) {

console.log('The user is verified');
return;

}).catch(function (error) {

console.log('Error', error);
return;
});

}

客户端我正在执行一个 HTTP 请求来调用 firebase 云函数。

/* CLIENT SIDE */
var currentUser = firebase.auth().currentUser.uid;
var firebaseUserToken = firebase.auth().currentUser.getToken();

firebase.auth().currentUser.getToken(/* forceRefresh */ true).then(function (firebaseUserToken) {
fetch('https://us-central1-MYAPP.cloudfunctions.net/verifyToken', {

'method': 'POST',
'headers': {
'Authorization': 'Bearer ' + firebaseUserToken,
'Content-Type': 'application/json'
},
'body': JSON.stringify({
'uid': currentUser,
'token': 1234,
})
}).then(function (response) {
console.log('successful response');
}).catch(function (error) {
console.error('Error in fetch', error);

});

}).catch(function (error) {
console.error('Error in getting firebase token', error);

});

我无法找出无限循环的原因。

我非常感谢对此的任何帮助。谢谢!

最佳答案

我错过了成功案例的 res.send()

根据文档:

始终使用 send()、redirect() 或 end() 结束 HTTP 函数。否则,您的函数可能会继续运行并被系统强制终止。

https://firebase.google.com/docs/functions/http-events

关于javascript - Firebase 的云功能陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com