nodejsexpress登录失败
nodejs express login fail
我正在使用express会话登录用户。
中间件:
var requireLogin = function (req, res, next) {
if (req.session.user) {
next();
} else {
res.redirect('/');
}
}
路线:
app.post('/login', requireLogin, routes.login);
exports.login = function (req, res) {
var query = {username:req.body.username, password:req.body.password};
User.find(query, function (err, data) {
if (data) {
req.session.user = data;
console.log(data);
res.redirect('/home');
} else {
console.log(err);
res.redirect('/');
}
});
};
当我输入错误的用户名和密码时,它仍然重定向到主页,但数据是null
。
find
返回匹配结果数组,findOne
返回匹配文档。
我想findOne
适用于这种情况。
app.post('/login', requireLogin, routes.login);
exports.login = function (req, res) {
var query = {username:req.body.username, password:req.body.password};
User.findOne(query, function (err, data) {
if (data && !err) {
req.session.user = data;
console.log(data);
res.redirect('/home');
} else {
console.log(err);
res.redirect('/');
}
});
};
因为find
返回一个结果数组,所以即使if (data)
为空,它仍将计算为true
。
findOne
更合适,因为您只需要查找一个具有唯一用户名/密码组合的用户。这样,如果找到匹配的User
,则if (data)
将仅评估为true
。
User.findOne(query, function (err, data) {
if (err) {
// the username/password could be valid (or not),
// but there's no way to tell because there was some server error
console.log(err);
res.redirect('/');
} else if (data) {
// a user was found that matched the query
req.session.user = data;
console.log(data);
res.redirect('/home');
} else {
// there is no User that matches the query
res.redirect('/');
}
});
相关文章:
- 解析JS SDK登录到Node.JS中运行的解析服务器=失败
- nodejsexpress登录失败
- 当Firefox尝试登录时,Selenium测试失败
- 如果使用 JavaScript 登录失败,如何在登录页面中显示消息
- 登录失败时不刷新
- Facebook登录默默失败
- JavaScript 中的登录脚本失败
- 登录失败时导航到注册页面
- Facebook JavaScript API - Chrome 中的登录失败
- parse.com javascript登录safari手机失败.(QuotaExceededError)
- 谷歌登录youtube帐户失败
- gcloud auth登录失败,因为禁用了java脚本
- Meteor,跟踪用户's次登录尝试失败,并禁止他们在x次尝试后登录
- 仅使用Javascript成功或失败登录后重定向至html页面
- 我如何能保持登录失败后弹出登录
- 登录失败后,如何保持模态窗口打开?
- 当登录失败时,如何在php中调用引导模式
- FB登录失败(没有错误,没有什么)
- Angularjs的HTTP POST调用在部署中验证登录失败-返回400错误
- Firebase项目导致“认证/网络请求失败”;登录错误