使用session和node.js检查用户是否已登录

问题描述 投票:1回答:1

我对node.jsexpress-session很新。我正在尝试实施登录/注册系统。如果用户已登录,我将允许访问它们以查看记分板等一些页面,否则(用户未登录或注册)我想将他/她重定向到登录/注册页面。

这是我的代码:

router.post('/login', (req, res) => {
    var email = req.body.email;
    var password = req.body.password;
    userModel.authenticate(email, password, (err, user) => {
        if (err) {
            console.log(err)
        }
        else if (!user) {
            console.log('Wrong Password')
        }
        else {
            req.session.userId = user._id;
            console.log(req.session.userId);
            res.redirect('/user/scoreboard')
        }
    })
});

router.post('/register', (req, res) => {
    var newUser = {
        teamName: req.body.teamName,
        faculty: req.body.faculty,
        email: req.body.email,
        password: req.body.password
    }
    userModel.create(newUser, (err, user) => {
        if (err) {
            console.log('[Registratoin]: ' + err);
        } else {
            req.session.userId = user._id;
            console.log('[Registration]: Done');
            // req.session.userID = user._id;
            res.redirect('user/scoreboard')
        }
    });
});

router.get('/scoreboard',async (req, res) => {
    console.log(req.session.userId)
    if (req.session.userId) {
        const teams = await userModel.find({}).sort('-score')
        const faculties = await userModel.aggregate([{
            "$group": {
                _id: "$faculty",
                average: {
                    $avg: "$score"
                }
            }
        }]).sort("-average")
        res.render('main/scoreboard', {
            teamInformation: teams,
            finalResult: faculties
        })
    }
    else {
        res.redirect('/')
    }


});

这是我的前端功能:

function registration() {
        $.post('/user/register', {
            teamName: $('#teamName').val(),
            faculty: $('#faculty').val(),
            email: $('#emailSignUp').val(),
            password: $('#passwordSignUp').val()
        }).done(
            history.pushState(null, null, "user/scoreboard")
        )
    }
    function login() {
        $.post('/user/login', {
            email: $('#emailSignIn').val(),
            password: $('#passwordSignIn').val()
        }).done(() => {
            history.pushState(null, null, "user/scoreboard")
        })
    }

每当我注册一个新用户时,页面就会被重新加载!

enter image description here

不幸的是,我不知道问题出在哪里(从服务器端或前端实现)。我该怎么调试呢?

node.js session express-session
1个回答
0
投票

看来因为你使用submit按钮你的页面会自动重新加载。

我建议您将输入类型更改为button并添加,然后按照以下说明操作:

<input type="button" value="ورود" onclick="login()"/>

function login() {
        $.post('/user/login', {
            email: $('#emailSignIn').val(),
            password: $('#passwordSignIn').val()
        }).done(() => {
            window.location.assign('/user/scoreboard')
        })
}
© www.soinside.com 2019 - 2024. All rights reserved.