我正在为一个项目使用nodejs,现在我想用护照npm登录我的帐户,但不是从网页,从请求发布方法登录,可以吗?
像这样的主要代码:
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”方法从数据库中打印出用户数据,但是在重定向首页时丢失了用户会话。有什么建议吗?
当用户GET时,它不会重定向用户,/check
因为/login
in的POST请求/check
本身即已重定向,而不是实际用户。另外,向内部网页发出内部请求也不是登录的最佳解决方案。我建议像这样创建login()
中间件:
// 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
存在来检查用户是否已登录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句