Ошибка: невозможно установить заголовки после их отправки после попытки входа - PullRequest
0 голосов
/ 06 апреля 2019

Есть много вопросов с моей проблемой, но я попробовал некоторые решения, но никто не работал.

Я получаю следующую ошибку каждый раз, когда я пытаюсь выполнить вход в систему:

Ошибка: невозможно установить заголовки после их отправки.в validateHeader (_http_outgoing.js: 491: 11) в ServerResponse.setHeader (_http_outgoing.js: 498: 3) в ServerResponse.header (/ home / ale / PycharmProjects / veople / webapp / functions / node_modules / express / lib / response).js: 767: 10) в userService.checkUser (/home/ale/PycharmProjects/veople/webapp/functions/index.js:54:18) в Object.firebase.auth.onAuthStateChanged.firebaseUser [как следующий] (/ home /ale / PycharmProjects / veople / webapp / functions / auth.js: 69: 17) на /home/ale/PycharmProjects/veople/node_modules/@firebase/util/dist/index.node.cjs.js:1361:22 в /home/ale/PycharmProjects/veople/node_modules/@firebase/util/dist/index.node.cjs.js: 1465: 21 at at process._tickCallback (внутренний / process / next_tick.js: 189: 7)

это мой index.js в узле:

app.get('/user', (request, response) => {
    userService.checkUser( (firebaseUser) => {
        if (firebaseUser) {
            response.render('user', {firebaseUser});
        }else {
            // response.redirect('/');
            response.redirect('/');
        }
        response.set('Cache-Control', 'public, max-age=300, s-maxage=600');
        response.render('index');
    });

});


app.post("/login", (req, res) => {
 var userEmail = req.body.emailLogin;
 var userPassword = req.body.passwordLogin;
 console.log(userEmail, userPassword); //This log the email and the password

 userService.loginUser(
   userEmail,
   userPassword,

   (error, authData) => {
     if (error) {
       return res.status(401).send("Unauthorized");
     } else {
       res.redirect('/user');
       //console.log(authData);
       return authData
     }
   }
 );
});

и в auth.js у меня есть:

function loginUser(email, password, callback) {
     console.log(email, password);
     firebase
       .auth()
       .signInWithEmailAndPassword(email, password)
       .then((firebaseUser) => {
         // Success
         console.log("Ok, lovely I'm logged");
         callback(null, firebaseUser);
         //console.log(firebaseUser);
         return firebaseUser
       })
       .catch((error) => {

         callback(error);
       });
   }


function checkUser( callback ) {
   firebase
       .auth()
       .onAuthStateChanged(firebaseUser => {
           if(firebaseUser) {
               // console.log(firebaseUser);
               callback(firebaseUser);
               return firebaseUser;
           } else {
               console.log('pp');
               callback(null);
               return firebaseUser;
           }

       });
}

Пока я запускаю сервер на моей машине, логин работает, но я все равно получаю ошибку в своем журнале, вместо этого, если я разверну свой проект на firebase, я не смогу использовать функцию логина.

ProbabПроблема в том, что эта ошибка.

Может кто-нибудь объяснить мне, что я делаю не так?Спасибо

РЕДАКТИРОВАТЬ

После применения решения @molda я получаю:

ошибка: ошибка:Не удается установить заголовки после их отправки.в validateHeader (_http_outgoing.js: 491: 11) в ServerResponse.setHeader (_http_outgoing.js: 498: 3) в ServerResponse.header (/ home / ale / PycharmProjects / veople / webapp / functions / node_modules / express / lib / response).js: 767: 10) в ServerResponse.location (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/express/lib/response.js:884:15) в ServerResponse.redirect (/ home / ale / PycharmProjects /veople / webapp / functions / node_modules / express / lib / response.js: 922: 18) в userService.checkUser (/home/ale/PycharmProjects/veople/webapp/functions/index.js:51:22) в Object.firebase.auth.onAuthStateChanged.firebaseUser [как следующий] (/home/ale/PycharmProjects/veople/webapp/functions/auth.js:73:17) в / home / ale / PycharmProjects / veople / node_modules / @ firebase / util / dist/index.node.cjs.js:1361:22 at /home/ale/PycharmProjects/veople/node_modules/@firebase/util/dist/index.node.cjs.js:1465:21 at at process._tickCallback (внутренний /process / next_tick.js: 189: 7) 127.0.0.1 - - [06 / Apr / 2019: 10: 54: 29 +0000] "GET / logout HTTP / 1,1 "302 46" http://localhost:5000/" "Mozilla / 5,0 (X11;Linux x86_64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 71.0.3578.98 Safari / 537.36 OPR / 58.0.3135.127 "[хостинг] Ошибка приложения перезаписи / в локальную функцию: Ошибка: невозможно установить заголовки после их отправки.validateHeader (_http_outgoing.js: 491: 11) в ServerResponse.setHeader (_http_outgoing.js: 498: 3) в ServerResponse.header (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/exse/jsb): 767: 10) в ServerResponse.send (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/express/lib/response.js:170:12) в готовом (/ home / ale / PycharmProjects / veople / webapp/functions/node_modules/express/lib/response.js:1004:10) в /home/ale/PycharmProjects/veople/webapp/functions/node_modules/consolidate/lib/consolidate.js:876:7 в / home / ale /PycharmProjects / veople / webapp / functions / node_modules / consolidate / lib / consolidate.js: 161: 5 в Promise._execute (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/bluebird/js/release/debuggability.js: 313: 9) на Promise._resolveFromExecutor (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/bluebird/js/release/promise.js:483:18)при новом обещании (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/bluebird/js/release/promise.js:79:10) на обещание (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/consolidate/lib/consolidate.js:154:10) в Function.exports.handlebars.render (/home/ale/PycharmProjects/veople/webapp/functions/node_modules/consolidate/lib/consolidate.js:866:10) по адресу /home/ale/PycharmProjects/veople/webapp/functions/node_modules/consolidate/lib/consolidate.js:181:27 по адресу /home/ale/PycharmProjects/veople/webapp/functions/node_modules/consolidate/lib/consolidate.js:101:5 at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js: 511: 3)

РЕДАКТИРОВАТЬ 2

index.js:

function createDatauser(firebaseUid, name, lastname){
    const docRef = db.collection('users').doc(firebaseUid);

    const setData = docRef.set({
      first: name,
      last: lastname
    });
}

...

app.get('/', (request, response) => {
    userService.checkUser( (firebaseUser) => {
        if (firebaseUser) {
            console.log(firebaseUser.email)
        }else {
            console.log('not logged in');
        }
        // response.set('Cache-Control', 'public, max-age=300, s-maxage=600');
        response.render('index', {firebaseUser});
    });



});



...

app.post("/register", (req, res) => {
 const nameRegister = req.body.name;
    const surnameRegister = req.body.surname;
    const emailRegister = req.body.emailRegister;
    const passwordRegister = req.body.passwordRegister;
    const confirmPasswordRegister = req.body.confirmPasswordRegister;
    console.log(emailRegister, passwordRegister);

 userService.registerUser(
   emailRegister,
   passwordRegister,

   (error, authData) => {
     if (error) {
       return res.status(401).send("Unauthorized");
     } else {
       res.redirect('/user');
       console.log(authData);
       createDatauser(authData.user.uid, nameRegister, surnameRegister);
       return authData
     }
   }
 );
});

...

app.get("/logout", (req, res) => {
 userService.logoutUser();
 res.redirect('/');

});

auth.js



function registerUser(email, password, callback) {
      console.log(email, password);
      firebase
        .auth()
        .createUserWithEmailAndPassword(email, password)
        .then((firebaseUser) => {
          // Success
          //console.log("Ok, lovely I'm registred", firebaseUser);
          callback(null, firebaseUser);
          return firebaseUser
        })
        .catch((error) => {
          // Error Handling
          // var errorCode = error.code;
          // var errorMessage = error.message;
          //console.log(errorCode); //auth/user-not-found
          //console.log(errorMessage); //There is no user record corresponding to this identifier. The user may have been deleted.

          callback(error);
        });
    }


...


function logoutUser(){
    firebase.auth().signOut()
        .then(() => {
            return null;
      // Sign-out successful.
    })
        .catch((error) => {
            return error;
      // An error happened.
    });
}

1 Ответ

0 голосов
/ 06 апреля 2019

Вызов response.render(...) более одного раза вызовет эту ошибку.

Решение состоит в том, чтобы удалить второй вызов рендеринга, чтобы эти 2 строки:

response.set('Cache-Control', 'public, max-age=300, s-maxage=600');
response.render('index');

Так должно выглядеть так:

app.get('/user', (request, response) => {
    userService.checkUser( (firebaseUser) => {
        if (firebaseUser) {
            response.render('user', {firebaseUser});
        }else {
            response.redirect('/');
        }
        // what is the bellow code even for??
        // above you either render user page
        // or redirect to /
        // response.set('Cache-Control', 'public, max-age=300, s-maxage=600');
        // response.render('index');
    });
});
...