Node.js 使用Express的节点passport流

Node.js 使用Express的节点passport流,node.js,express,passport.js,Node.js,Express,Passport.js,我正在学习Node.s和Express,下面是来自的示例。你能解释一下下面的问题吗 在“/login”post路由中,如果我需要访问请求和响应对象,我应该如何操作 LocalStrategy()中的“done”函数是什么?我如何知道要传递什么参数?看起来需要3个参数,第2个参数是用户对象,第3个参数是消息。第一个论点是什么 用户名和密码如何从“/login”post路由传递到LocalStrategy?幕后有什么魔力 router.post(“/login”),passport.authenti

我正在学习Node.s和Express,下面是来自的示例。你能解释一下下面的问题吗

  • 在“/login”post路由中,如果我需要访问请求和响应对象,我应该如何操作
  • LocalStrategy()中的“done”函数是什么?我如何知道要传递什么参数?看起来需要3个参数,第2个参数是用户对象,第3个参数是消息。第一个论点是什么
  • 用户名和密码如何从“/login”post路由传递到LocalStrategy?幕后有什么魔力
    router.post(“/login”),passport.authenticate(“login”{
    成功重定向:“/”,
    failureRedirect:“/login”,
    failureFlash:正确
    }));
    
    passport.use(“登录”),新的本地策略(函数(用户名、密码、完成){
    findOne({username:username},函数(err,User){
    if(err){返回完成(err);}
    如果(!用户){
    返回done(null,false,{消息:“没有用户拥有该用户名!”});
    }
    user.checkPassword(密码,函数(err,isMatch){
    if(err){返回完成(err);}
    如果(isMatch){
    返回完成(空,用户);
    }否则{
    返回完成(null,false,{消息:“无效密码”。});
    }
    });
    });
    }));
    
    问题1和问题2的答案在

    3位于同一文档页面。
    app.get('/login', function(req, res, next) {
      passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.redirect('/login'); }
        req.logIn(user, function(err) {
          if (err) { return next(err); }
          return res.redirect('/users/' + user.username);
        });
      })(req, res, next);
    });
    
    passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'passwd'
      },
      function(username, password, done) {
        // ...
      }
    ));