Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何阻止Firebase auth处理的后端继续运行到其他浏览器/会话_Node.js_Firebase_Express_Heroku_Firebase Authentication - Fatal编程技术网

Node.js 如何阻止Firebase auth处理的后端继续运行到其他浏览器/会话

Node.js 如何阻止Firebase auth处理的后端继续运行到其他浏览器/会话,node.js,firebase,express,heroku,firebase-authentication,Node.js,Firebase,Express,Heroku,Firebase Authentication,我正在创建一个基于身份验证的web应用程序。当只有一个会话在运行时,它可以正常工作,但如果另一个会话上的用户登录,它将执行到所有会话,允许每个人查看该用户的信息并使用其权限 我已经确定这是因为我从这篇文章处理我的所有身份验证后端: 但我想知道是否有任何修复,而不必处理任何客户端。上面的帖子没有给出任何修复或建议 这是登录路线: app.post('/postSignIn', function(req, res) { console.log(req.body); let password

我正在创建一个基于身份验证的web应用程序。当只有一个会话在运行时,它可以正常工作,但如果另一个会话上的用户登录,它将执行到所有会话,允许每个人查看该用户的信息并使用其权限

我已经确定这是因为我从这篇文章处理我的所有身份验证后端:

但我想知道是否有任何修复,而不必处理任何客户端。上面的帖子没有给出任何修复或建议

这是登录路线:

app.post('/postSignIn', function(req, res) {
  console.log(req.body);
  let password = req.body.password;
  let email = req.body.email;
  let user = firebase.auth().currentUser;
  if (user) {
    //TODO: Show user info is correct and redirect
    success = "You're already logged in!";
    res.render('login', {
      success: success
    })
  } else {
    firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorMessage)
        res.render('login', {
          error: errorMessage
        })
      })
      .then(

      ).catch(
        firebase.auth().onAuthStateChanged(function(user) {
          if (user) {
            success = "You're logged in!";
            res.render('login', {
              success: success
            })
          } else {
            res.render('login', {
              error: errorMessage
            })
          }
        })
      );
  }
})
下面是如何检查身份验证状态的示例:

app.get('/makeThing', function(req, res) {
  if (firebase.auth().currentUser) {
    res.render('makeThing')

  } else {
    res.render('things', {
      error: 'Login first.',
      things: things,
    })

  }
});
我以为这会处理不同的会话,但事实并非如此,
firebase.auth()。所有会话都会记住currentUser
,因此如果一个用户登录,所有其他会话都会登录到他们的帐户。如果有人能够描述前端或后端解决方案,包括使用Passport或Auth0之类的修复,那就太好了


该应用程序也被托管在Heroku上,因此任何通过Heroku进行的修复,例如每个用户运行不同的实例,都将受到欢迎。

如果有人有相同的问题,请使用cookies!经过一段时间的研究,我确定这是最好的解决方案

这个溢出页面很好地解释了如何使用它们。

这是因为cookie是在客户端处理的。我建议在登录时设置cookie,并通过cookie检查当前身份验证状态,而不是Firebase当前用户功能。这对我有用