Firebase Auth SignOut () - nodejs - PullRequest
       2

Firebase Auth SignOut () - nodejs

0 голосов
/ 31 марта 2020

Я использую Firebase для управления пользователями. Я использую firebase.auth().signInWithEmailAndPassword() метод для входа в систему пользователей. Работает нормально. Но когда я пытаюсь выйти, используя метод firebase.auth().signOut(), он дает ответ, а nodejs просто выдает следующую ошибку.

[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Server running on port: 3000
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:485:11)
    at ServerResponse.header (D:\web-server\TellMe-API\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (D:\web-server\TellMe-API\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (D:\web-server\TellMe-API\node_modules\express\lib\response.js:267:15)
    at Object.next (D:\web-server\TellMe-API\api\routes\firebaseAuth.js:29:36)
    at D:\web-server\TellMe-API\node_modules\@firebase\util\dist\index.node.cjs.js:1226:22
    at D:\web-server\TellMe-API\node_modules\@firebase\util\dist\index.node.cjs.js:1336:21
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 'ERR_HTTP_HEADERS_SENT'
}

Это код, который я использовал для выхода из системы.

router.post('/signout', (req, res) => {
    const user = firebase.auth().currentUser;
    if (user) {
        firebase.auth().signOut().then(() => {
            res.status(200).json({
                status: 'success',
                message: 'Successfully logged/signed out'
            });
        }).catch(error => console.log('Something went wrong! ', error))
    } else {
        res.status(403).json({
            status: 'failure',
            message: 'user already logged out.'
        });
    }
});

Я также пытался использовать метод async / await, он тоже не работает. Везде, где я вызываю метод firebase.auth().signOut(), выдается вышеуказанная ошибка.

1 Ответ

1 голос
/ 31 марта 2020

Ошибка

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

возникает, когда вы пытаетесь отправить ответ после того, как он уже был отправлен.

Я не эксперт по пожарной базе, но я предполагаю, что firebase.auth().signOut() уже отправляет ответ пользователю при вызове.

Таким образом, код

res.status(200).json({
  status: 'success',
  message: 'Successfully logged/signed out'
});

пытается отправить ответ после его отправки и генерирует ошибку.

Вы может упростить ваш код таким образом

router.post('/signout', (req, res) => {
    const user = firebase.auth().currentUser;
    if (user) {
        firebase.auth().signOut().then(() => {
            console.log("User successfully logged out"); // Just for the example.
        }).catch(error => console.log('Something went wrong! ', error))
    } else {
        res.status(403).json({
            status: 'failure',
            message: 'user already logged out.'
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...