如何使用护照在Express中的某些路线上检查用户身份验证

时间:2016-08-04 23:42:20

标签: passport.js

所有

我对Passport.js很新,现在,我想要的是检查用户是否经过身份验证以访问某个路由,并且我在该路由上添加了passport auth,但它似乎是一个交易循环:

它支持的行为是:当用户点击该URL时,如果没有,则重定向到/ auth,否则只是继续。

app.use("/url-must-be-auth", 
        passport.authenticate("local", {
            successRedirect: '/url-must-be-auth', 
            failureRedirect: '/auth'
        })
)

passport.serializeUser(function(user, done) {  
    debugger;
    done(null, user.email);
});

passport.deserializeUser(function(email, done) {  
    debugger;

    User.findOne({
        where: { email: email }
    })
    .then(function(user) {
    debugger;

        done(null, user);
    })
    .catch(function(err) {
    debugger;

        done(err, null);
    });
});

deserilize部分永远不会被调用。

无论如何,只要忘记我所做的事情,任何人都可以帮助解决这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:1)

passport.authenticate()应仅用于登录或注册路线

您可以编写将检查用户身份验证的中间件功能,否则重定向到登录页面

function isAuthenticated(req, res, next){
    if(req.isAuthenticated())
        next();
    res.redirect('/login');
}

并将其作为某条路线的第一个函数传递:

app.get('/url-must-be-auth', isAuthenticated, function(req, res){
    //response
});