我正在使用nodejs进行项目,现在我希望使用护照npm登录我的帐户,但不是从网页登录,从请求发布方法,是否可以完成?
这样的主要代码:
<div>
<b>Far</b>
<ul class="exam" alt="Foo Items">
<li>Stuff</li>
<li>Things</li>
</ul>
<b>Near</b>
<ul class="exam" alt="Foo Items">
<li>dunno</li>
</ul>
</div>
<div>
<b>Far</b>
<ul class="exam" alt="Bar Items">
<li>Foo</li>
</ul>
<b>Near</b>
<ul>
<li>bar</li>
<li>eggs</li>
</ul>
</div>
当我用get方法调用“check”并使用正确的用户名/密码时,我可以用“login”方法从数据库打印出用户数据,但是当它重定向主页时丢失了用户会话。有什么建议吗?< / p>
答案 0 :(得分:1)
当用户获得/check
时,它不会重定向用户,因为/login
中对/check
的POST请求本身会被重定向,而不是实际用户。同时向内部网页发出内部请求也不是登录的最佳解决方案。我建议像这样创建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
是否存在来检查用户是否已登录。