【问题标题】:Passport JS auth middleware issuePassport JS auth 中间件问题
【发布时间】:2018-05-30 04:34:24
【问题描述】:

我正在使用护照 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"
}))

帮帮我。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 一个小时前我才弄明白。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2018-12-05
    • 2020-09-05
    • 2019-05-28
    • 2019-10-28
    • 2021-05-18
    • 2023-03-29
    • 2018-09-03
    相关资源
    最近更新 更多