我有中间件允许我检查用户身份验证,这里是:
function checkAuth(req, res, next) {
if (!req.session.user_id) {
res.redirect('/login');
} else {
next();
}
}
我有两个问题;
强大的用户验证检查吗?或者我应该在DB中检查user.id,如下所示:
if (!req.session.user_id) {
res.redirect('/login');
} else {
User.findById(req.session.user_id, function (err, user) {
if (!user) return res.redirect('/login');
else return next();
})
}
如果检查失败,我会重定向到登录页面:
res.redirect('/login');
但是如果我收到一个AJAX请求,我应该发送以下内容(我认为)
res.send(403, 'Permission denied');
那么如何查看请求类型并发送适当类型的响应? 这样做是否正确?
答案 0 :(得分:4)
检查会话就足够了。服务器的会话和客户端之间存在映射,这就是它足够安全的原因。当然,如果您想要“绝对”安全性(但不存在100%安全性),则使用SSL。
以下是Django / RoR如何检查请求是否来自AJAX调用(在node.js代码中转换):
function isXHR( req, res ) {
return !!req.header( 'HTTP_X_REQUESTED_WITH' ) === 'XMLHttpRequest';
}
但是,这意味着XHR调用必须包含此HTTP标头。大多数库都这样做(jQuery,Dojo,YUI,...),但是如果你正在做手动XHR请求,你一定不要忘记包含它。
另一种可能符合您需求的方式:
function isJSON( req, res ) {
return !!req.header( 'Content-Type' ) === 'application/json';
}
在那里,您正在检查Content-Type
标题。如果它询问某些JSON数据(如大多数XHR请求),则向其发送一些JSON数据。