使用 request 和 passport npm 登录账号

Use request and passport npm login account

我在一个项目中使用 nodejs,现在我想使用 passport npm 登录我的帐户,但不是从网页,从请求 post 方法,可以做到吗?

主要代码如下:

router.post('/login',function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.json(null); }

        req.logIn(user, function(err) {
            if (err) { return next(err); }
            //return res.redirect('/'); redirect not work 
        });
    })(req, res, next);
});

router.get('/check',function(req, res, next) {
    request.post({
       url:'http://localhost/login',
       headers:{
            'Content-Type': 'application/x-www-form-urlencoded'
       },
       form:{
       username:'myname',
       password:'mypassword'
    }},function(err,httpRes,body){
        //do here...?
        return res.redirect('/');
    });
});

当我用get方法调用"check"并使用正确的username/password时,我可以在"login"方法中从数据库中打印出用户数据,但是当它丢失用户会话时重定向主页 page.Any 建议?

当他们 GET /check 时,它不会重定向用户,因为 POST 在 /check 中对 /login 的请求正在被重定向,而不是实际用户。另外,向内部网页发出内部请求并不是登录的最佳解决方案。我建议像这样创建 login() middleware

// Don't forget to set req.body.username and req.body.password when calling login().
var login = function login(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return next(); }

    req.logIn(user, function(err) {
        if (err) { return next(err); }

        return next(null);
    });
  })(req, res, next);
};

然后适当地调用它:

router.post('/login', login, function(req, res, next) {
  if (req.user) {
    console.log('We logged in successfully!');
    res.redirect('/');
  } else {
    res.json(null);
  }
});

router.get('/check', function(req, res, next) {
  if (!req.user) {
    login(req, res, function(err) {
      if (err) {
        return next(err);
      }

      if (!req.user) {
        // No user, do some error handling.
      } else {
        // We have the user, do some custom stuff...
      }

      res.redirect('/');
    });
  } else {
    // User is logged in already, do some other custom stuff...
  }
});

您可以通过检查 req.user 是否存在来检查用户是否已登录。