首页 > 解决方案 > 护照认证,需要基本解释

问题描述

有人可以解释一下是什么以及为什么我们在passport.authenticate的末尾包含(req,res,next),到目前为止我在教程中看到的是我们需要它,因为我们希望它立即启动,但我真的不明白。

这是代码:

router.post('/login', (req, res, next) => { <br>
    passport.authenticate('local', { <br>
        successRedirect: '/songs/list', <br>
        failureRedirect: '/users/login', <br>
        failureFlash: true <br> 
    })(req, res, next);                  <---- *This line*

标签: node.jsauthenticationpassport.jspassport-local

解决方案


您正在声明一个函数并立即调用它。您这样做是为了req访问passport.authenticate.

所以如果你需要访问里面的请求对象,passport你需要一个自定义回调。你的代码似乎没有使用该req对象,所以你简单使用

app.post("/protected",passport.authenticate("local",{
        successRedirect:"/user",
        failureRedirect:"/login"
    }),function(req,res){
});

如果您的应用程序需要访问 req 对象,那么:

app.get('/protected', function(req, res, next) {
  passport.authenticate('local', function(err, user, profile) {
    if (err) { return next(err) }
    if (!user) { return res.redirect('/signin') }
    res.redirect('/account');
  })(req, res, next);
});

更多信息@ https://github.com/jaredhanson/passport/issues/1


推荐阅读