Как правильно войти в систему с помощью nodejs и express - PullRequest
0 голосов
/ 02 октября 2019

Я очень плохо знаком с веб-разработкой и использую Google в качестве руководства.

Если я введу неправильный логин, который не соответствует тому, что у меня есть в моей базе данных, веб-сайт просто застревает и сохраняетпытаясь «загрузить». Я также не понимаю, как выполнить аутентификацию на основе токенов для входа в систему, и мне хотелось бы получить еще несколько советов по этому вопросу, руководство, за которым я следую, рассказывает о шифровании базы данных и OAuth 2.0 с Google.

Если пользователь входит в систему с неправильным именем пользователя и паролем, я просто хочу, чтобы он выдал ошибку и перезагрузился обратно в login.ejs.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 02 октября 2019

Возможно, проблема в том, что вы ничего не возвращаете, если foundUser равно нулю или пароль не совпадает.

Если есть какая-либо ошибка, вы можете перенаправить ее на маршрут /login с запросомпараметр (err), который может быть прочитан клиентом с использованием JS при загрузке страницы. Если есть непустой параметр запроса err, прочитайте его и покажите в каком-нибудь всплывающем окне.

res.redirect("/login?err=The username does not exist");

//connect to mongodb
mongoose.connect("mongodb://localhost:27017/userDB", {
    useNewUrlParser: true
});

const userSchema = {
    username: String,
    password: String
};

const User = new mongoose.model("User", userSchema);

app.get("/", function(req, res) {
    res.render("home"); //render home.ejs
});

app.get("/login", function(req, res) {
    res.render("login"); //render login.ejs
});

app.post("/login", function(req, res) {
    const username = req.body.username;
    const password = req.body.password;

    try {
        User.findOne({
            username: username
        }, function(err, foundUser) {
            if (err || !foundUser) {
                return res.redirect("/login?err=The username does not exist");
            }
            if (foundUser.password !== password) {
                // you can use  bcryptjs for hashing and comparing hashed values.

                return res.redirect("/login?err=The username or password is invalid");
            }
            res.redirect("/counter");
        });
    } catch (error) {
       res.redirect("/login?err=something went wrong!");
    }
});

Подробнее об обработке аутентификации вы можете прочитать в nodeJS здесь . также проверьте passportjs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...