Проверьте, вошел ли пользователь в систему или не использует сеанс и node.js - PullRequest
0 голосов
/ 10 сентября 2018

Я довольно новичок в node.js и express-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

К сожалению, я не знаю, где проблема (со стороны сервера или внешней реализации). Как я могу это отладить?

1 Ответ

0 голосов
/ 10 сентября 2018

Кажется, из-за того, что вы используете кнопку 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')
        })
}
...