javascript - Firebase Auth SignOut() - nodejs
问题描述
我正在使用 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()
方法,都会出现上述错误。
解决方案
错误
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
当您在已发送响应后尝试发送响应时发生。
我不是 firebase 专家,但我的猜测是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.'
});
}
});
推荐阅读
- angular - 最小化角度材料对话框
- neo4j - Cypher 如何规范化 Pagerank 分数
- java - 在不同的查询中查询急切加载blob,如何延迟加载?
- jwt - 从客户端到服务器的 Blazor jwt
- shell - 在 shell 脚本中分配从文件中读取的日期值并更新文件
- javascript - 通过 Javascript 发送 Authorization Token Bearer
- ios - 是否有删除 pod try 创建的文件的命令
- java - 出现此错误-> Java 中的线程“main”java.util.InputMismatchException 中的异常
- sql - 如何从sql中的字段中删除特殊字符和前导零
- go - 如何计算文本中每个单词的出现次数