Я хочу проверить в базе данных Firestore, заплатил пользователь или нет. поэтому каждый раз, когда я иду по маршруту /paid
, я проверяю данные, если он заплатил или нет.
но если он запросит маршрут и скажем, он не заплатил. и я изменяю базу данных так, чтобы он заплатил, тогда я получаю ошибку
Я попытался проверить, отправил ли я заголовки дважды, но ничего не нашел.
приложение снова работает после перезапуска сервера.
это код app.js:
app.get("/paid", verifyUser, (req, res) => {
const claims = res.locals.decodedClaims;
const uid = claims.uid;
const email = claims.email;
const userRef = db.collection("users").doc(uid);
userRef.get().then(docSnapshot => {
if (docSnapshot.exists) {
userRef.onSnapshot(doc => {
// do stuff with the data
if (doc.data().paid) {
res.send("paid");
return;
}
res.send("Didn't pay");
});
} else {
userRef.set({ paid: false, name: email }); // create the document
res.send("<h1>hello world</h1><br>" + uid);
}
});
});
verifyUser middleWare (только для пояснения):
//import firebase admin module
const admin = require("firebase-admin");
module.exports = {
// check if cookie is available and if cookie is valid
verifyUser: (req, res, next) => {
var sessionCookie = req.cookies.session || "";
if (sessionCookie) {
admin
.auth()
.verifySessionCookie(sessionCookie, true)
.then(function(decodedClaims) {
//decodedClaims is not nessecary now
res.locals.decodedClaims = decodedClaims;
return next();
})
.catch(function(err) {
// Redirect to login page on error.
console.log(err);
res.redirect("/loggedOutFail");
});
} else {
// Redirect to login page when no session cookie available.
res.redirect("/loggedOutNoCookie");
}
}
};
это ошибка:
_http_outgoing.js:470
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:470:11)
at ServerResponse.header (C:\Users\mendi\Desktop\firebase-auth\node_modules\express\lib\response.js:771:10)
at ServerResponse.contentType (C:\Users\mendi\Desktop\firebase-auth\node_modules\express\lib\response.js:599:15)
at ServerResponse.send (C:\Users\mendi\Desktop\firebase-auth\node_modules\express\lib\response.js:145:14)
at userRef.onSnapshot.doc (C:\Users\mendi\Desktop\firebase-auth\app.js:306:13)
at DocumentWatch.watch.onSnapshot [as onNext] (C:\Users\mendi\Desktop\firebase-auth\node_modules\@google-cloud\firestore\build\src\reference.js:404:21)
at DocumentWatch.pushSnapshot (C:\Users\mendi\Desktop\firebase-auth\node_modules\@google-cloud\firestore\build\src\watch.js:519:18)
at DocumentWatch.onData (C:\Users\mendi\Desktop\firebase-auth\node_modules\@google-cloud\firestore\build\src\watch.js:403:26)
at BunWrapper.currentStream.on (C:\Users\mendi\Desktop\firebase-auth\node_modules\@google-cloud\firestore\build\src\watch.js:372:26)
at BunWrapper.emit (events.js:189:13)
В результате предполагается, что при каждом запросе я могу изменить данные в базе данных, и все по-прежнему работает нормально.