Passport JS auth middleware проблема

0

Я использую auth с использованием паспорта js, а база данных - mysql. Мой маршрут successRedirect - '/main', и в основном маршруте я добавил промежуточное ПО (isAuthenticated). Но проблема в том, что после ввода действительных учетных данных я не перенаправляюсь на '/main', вместо этого он просто отключается. Я пробовал, не добавляя промежуточное ПО к маршруту "/main", и он отлично работает.

var isAuthenticated = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next;
    }
    res.redirect("/login")
}

// AUTH Implementation

app.use(session( {
    secret: "asdnoifjasofijmaofmjkneknf",
    resave: false,
    saveUninitialized: false
}))

app.use(passport.initialize())
app.use(passport.session())

passport.use(new localStrategy(
    function(username, password, done) {
        connection.query("SELECT password FROM user" +
            " WHERE email = ?", [username], function (err, results, fields) {
            if (err) {
                console.log(err);
            }
            else if (results.length === 0) {
                done(null, false);
            }
            else {
                console.log("Results");
                console.log(results[0]);
                hashedPassword = results[0].password;
                bcrypt.compare(password, hashedPassword, function (err, response) {
                    if (response) {
                        console.log("True");
                        return done(null, true);
                    }
                    else {
                        console.log("False");
                        return done(null, false);
                    }
                })
            }
        })
    }
));

passport.serializeUser(function(ID, done) {
    done(null, ID);
});

passport.deserializeUser(function(ID, done) {
    connection.query("SELECT * FROM user WHERE userID = ?", [ID], function (err, results, fields) {
        if (err) throw err;
        else if (results.length === 0) done(null, false);
        else {
            done(null, results[0]);
        }
    })
    done(null, ID);
});

app.post("/login", passport.authenticate('local', {
    successRedirect: "/main",
    failureRedirect: "/login"
}))

app.get("/main", isAuthenticated, function(req, res) {
    res.send("In the main page");
})

app.post("/login", passport.authenticate('local', {
    successRedirect: "/main",
    failureRedirect: "/login"
}))

Помоги мне.

Теги:
express
passport.js

1 ответ

0

Вам нужно выполнить next функцию, а не возвращать ее.

var isAuthenticated = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect("/login")
}
  • 0
    Я смог понять это всего час назад. Спасибо за вашу помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню