Express

时间:2017-02-24 01:55:44

标签: node.js express passport.js

我正在学习Node.s和Express,我正在从https://github.com/EvanHahn/Express.js-in-Action-code/tree/master/Chapter_08/learn-about-me开始关注这个例子。你能解释一下这个问题吗?

  1. 在“/ login”发布路径中,如果我需要访问请求和响应对象,我该怎么办?
  2. LocalStrategy()中的“完成”功能是什么,以及我如何知道要传递的参数?看起来它需要3个参数,第二个参数是用户对象,第三个参数是消息。第一个论点是什么?
  3. 用户名和密码如何从“/ login”路径传递到LocalStrategy?场景背后有什么魔力?
  4. router.post("/login", passport.authenticate("login", {
      successRedirect: "/",
      failureRedirect: "/login",
      failureFlash: true
    }));
    
    passport.use("login", new LocalStrategy(function(username, password, done) {
        User.findOne({ username: username }, function(err, user) {
          if (err) { return done(err); }
          if (!user) {
            return done(null, false, { message: "No user has that username!" });
          }
          user.checkPassword(password, function(err, isMatch) {
            if (err) { return done(err); }
            if (isMatch) {
              return done(null, user);
            } else {
              return done(null, false, { message: "Invalid password." });
            }
          });
        });
      }));
    

1 个答案:

答案 0 :(得分:1)

问题#1和#2的答案是http://passportjs.org/docs

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);
});

3位于同一个文档页面。

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'passwd'
  },
  function(username, password, done) {
    // ...
  }
));