使用请求和护照npmlogin帐户

我正在使用nodejs作为一个项目,现在我想用护照npmlogin我的帐户,但是不能从请求发布方法的网页中完成?

主要的代码是这样的:

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”并使用正确的用户名/密码时,我可以在“login”方法中从数据库打印出用户数据,但在redirect主页时丢失了用户会话。任何build议?

当GET /check时,用户不会redirect,因为/login中的POST请求将被redirect到本身,而不是实际的用户。 向内部网页发出内部请求也不是login的最佳解决scheme。我build议创buildlogin() 中间件,如下所示:

 // 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存在来检查用户是否login。