0

我想为需要注销且未在前端启用 JavaScript 的用户提供 Node.JS Express 路由包装器。DB是我对我的 Firebase 的引用:

router.get('/logout', function(req, res) {
    DB.unauth();
    res.redirect(302, '/');
});

当我尝试以这种方式注销已登录时,我收到以下错误:

错误:发送后无法设置标头。

Firebase.unauth()的文档非常简单,但是在路由中调用它(带有或不带有res.redirect)会导致错误。有人对此问题有建议或解决方法吗?

4

2 回答 2

1

所以我遇到了同样的问题。对我来说,我使用的是异步 authDataCallback 函数。显然 onAuth 设置您的标头,因此当您尝试转到 /logout 时,您的标头已设置并且重定向将失败。所以我所做的就是将检查登录状态的 authDataCallback 切换为:

var authData = ref.getAuth();

if (authData) {
console.log("User " + authData.uid + " is logged in with " + + authData.provider);
} else {
console.log("User is logged out");
}

然后我的注销路线完美无缺。

app.get('/logout', function(req , res){
   ref.unauth();
   res.redirect('/');
});
于 2015-07-29T23:23:27.953 回答
0

看起来该错误正在重定向上引发 - 一旦发送了正文,您就无法标头。也许尝试:

response.writeHead(302, { Location: '/' });
response.end();

如果这不起作用,我会投入资金来.unauth()设置标题,如果是,您可能需要使用 ol'<noscript>标签。

尽管如此:您正在构建一个应用程序,该应用程序使用 JavaScript 在后端与 Firebase 集成。为什么要构建一个(可能)严重依赖 JavaScript 的现代网络应用程序,仅在用户不支持时支持注销用户?他们甚至可以首先登录吗?

于 2015-07-22T03:17:58.083 回答