Passport JS auth中间件问题

时间:2017-12-15 23:52:35

标签: javascript mysql node.js express passport.js

我使用护照js实现auth,数据库是mysql。我的成功直接路线是' / 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"
}))




帮帮我。

1 个答案:

答案 0 :(得分:0)

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

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