Passport JS auth中间件问题

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

我使用护照js实现auth,数据库是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"
}))

帮帮我。

javascript mysql node.js express passport.js
1个回答
0
投票

你需要执行next函数而不是返回它。

var isAuthenticated = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect("/login")
}
© www.soinside.com 2019 - 2024. All rights reserved.