使用 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
是否存在来检查用户是否已登录。
我在一个项目中使用 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
是否存在来检查用户是否已登录。