Javascript 我的Firebase网站始终只允许一个用户登录,为什么?

Javascript 我的Firebase网站始终只允许一个用户登录,为什么?,javascript,node.js,firebase,firebase-authentication,Javascript,Node.js,Firebase,Firebase Authentication,情况: router.post('/login', function(req, res, next) { var email = req.body.email; var password = req.body.password; // Validation req.checkBody('email', 'Email is required').notEmpty(); req.checkBody('email', 'Email is not valid')

情况:

router.post('/login', function(req, res, next) {
    var email = req.body.email;
    var password = req.body.password;

    // Validation
    req.checkBody('email', 'Email is required').notEmpty();
    req.checkBody('email', 'Email is not valid').isEmail();
    req.checkBody('password', 'Password is required').notEmpty();

    var errors = req.validationErrors();

    if(errors){
        res.render('users/login', {
            errors: errors
        });
    } else {

        firebase.auth().signInWithEmailAndPassword(email, password).then(authData => { 

            console.log("Authenticated user with uid:",authData);
            req.flash('success_msg', 'You have logged in');
            res.redirect("/fun/index");

        }).catch(error => { 

            var errorCode = error.code;
            var errorMessage = error.message;
            console.log("Login Failed: ", error);
            req.flash('error_msg', "Unknown user or password");
            res.redirect('/users/login');

        });
    }
});
如果我从一台设备登录并在任何其他设备(我的手机、朋友的笔记本电脑、邻居的电脑)上打开网站,网站会显示我已登录所有这些设备

如果我注销,则在所有设备上显示为已注销

实际上,我的网站一次只能被一个用户使用,这是毫无意义的

我一定是误用了Firebase认证


代码:

router.post('/login', function(req, res, next) {
    var email = req.body.email;
    var password = req.body.password;

    // Validation
    req.checkBody('email', 'Email is required').notEmpty();
    req.checkBody('email', 'Email is not valid').isEmail();
    req.checkBody('password', 'Password is required').notEmpty();

    var errors = req.validationErrors();

    if(errors){
        res.render('users/login', {
            errors: errors
        });
    } else {

        firebase.auth().signInWithEmailAndPassword(email, password).then(authData => { 

            console.log("Authenticated user with uid:",authData);
            req.flash('success_msg', 'You have logged in');
            res.redirect("/fun/index");

        }).catch(error => { 

            var errorCode = error.code;
            var errorMessage = error.message;
            console.log("Login Failed: ", error);
            req.flash('error_msg', "Unknown user or password");
            res.redirect('/users/login');

        });
    }
});

问题:

router.post('/login', function(req, res, next) {
    var email = req.body.email;
    var password = req.body.password;

    // Validation
    req.checkBody('email', 'Email is required').notEmpty();
    req.checkBody('email', 'Email is not valid').isEmail();
    req.checkBody('password', 'Password is required').notEmpty();

    var errors = req.validationErrors();

    if(errors){
        res.render('users/login', {
            errors: errors
        });
    } else {

        firebase.auth().signInWithEmailAndPassword(email, password).then(authData => { 

            console.log("Authenticated user with uid:",authData);
            req.flash('success_msg', 'You have logged in');
            res.redirect("/fun/index");

        }).catch(error => { 

            var errorCode = error.code;
            var errorMessage = error.message;
            console.log("Login Failed: ", error);
            req.flash('error_msg', "Unknown user or password");
            res.redirect('/users/login');

        });
    }
});
我犯了什么错误?我该如何改正


编辑:找到以下内容:

但是问题仍然没有答案。

如果您使用的是,您实际上处于单用户状态,而您的服务器就是单用户。通常,该单个用户是一个特权服务帐户,但您似乎正在使用它同时登录单个用户。这不是AdminSDK支持的用例

如果您希望网站按用户登录,则必须使用在浏览器本身中进行身份验证。web SDK代表已登录的用户直接安全地与Firebase服务通信。

如果您使用,则实际上处于单用户状态,并且您的服务器是单用户。通常,该单个用户是一个特权服务帐户,但您似乎正在使用它同时登录单个用户。这不是AdminSDK支持的用例


如果您希望网站按用户登录,则必须使用在浏览器本身中进行身份验证。web SDK代表已登录的用户直接安全地与Firebase服务通信。

您无法轻松修复它,因为您似乎已选择在服务器上登录该用户。一个初始化的Firebase API应用程序只能有一个登录用户,这就是您的问题。我模模糊糊地记得,在你之前的一个问题上发表的评论中提到了这一点。@cartant也许这就像在客户端登录一样简单?你无法轻松解决它,因为你似乎选择了在服务器上登录用户。一个初始化的Firebase API应用程序只能有一个登录用户,这就是您的问题。我模模糊糊地记得在你之前的一个问题的评论中提到过这一点。@cartant也许这就像在客户端登录一样简单?我在服务器上使用了同样的逻辑进行注销和注册。这是否意味着在同一时间只有一次注销或注册?我需要将所有内容移动到客户端吗客户有没有办法改变我的逻辑,但保留在服务器上的大部分?我使用的是web SDK的btw,但在我的服务器端。我更新了我的问题,请看一看。但也请回答:“这是否意味着在同一时间只有一个注销或注册?”我在服务器上使用了相同的逻辑进行注销和注册。这是否意味着在同一时间只有一个注销或注册?我是否需要将所有内容移动到客户端?有没有办法改变我的逻辑,但保留在服务器上的大部分?我使用的是web SDK的btw,但在我的服务器端。我更新了我的问题,请看一看。但也请回答:“这是否意味着在同一时间只有一次注销或注册?”