我目前正在使用Node&快递来构建我的应用程序
我的身份验证功能如下所示:
exports.isAuthenticatedLocal = function(req, res, callback) {
// console.log(req.headers);
if (req.isAuthenticated()) {
callback(null, true);
} else {
res.redirect('/login');
}
};
这在我的用户路由器中调用:
router.get('/profile', authController.isAuthenticatedLocal, function(req, res) {
res.render('profile', { user : req.user });
});
所有这些都适用于从浏览器呈现的配置文件页面。但是,如果用户已登录并向GET
发送localhost/profile
请求,则会返回包含所有用户详细信息的整个页面。
问题是我使用connect-mongo
进行持久护照连接。
var MongoStore = require('connect-mongo')(session);
...
var sessionStore = new MongoStore({ mongooseConnection: db.connection });
app.use(session({
key: 'connect.sid',
secret: 'secret',
store: sessionStore,
resave: true,
saveUninitialized: true
}));
使用简单会话不会从非浏览器req.isAuthenticated()
请求中触发GET
,而是重定向到的登录页面会被渲染(这很好)。
app.use(session({
key: 'connect.sid',
secret: 'secret',
resave: true,
saveUninitialized: true
}));
那么我如何能够与connect-mongo保持持久连接并防止用户通过身份验证的所有页面被呈现?是否有我应该寻找的特定标题?
提前致谢。
答案 0 :(得分:1)
您可以查看用户代理标头,看看它是否是浏览器。您可以使用express-useragent之类的内容来帮助您。
User-Agent标头不是必需的,可以欺骗,因此不应被视为绝对真理。
我不认为你的路线应该有不同的行为,这取决于它认为客户是什么或不是什么。您应该有一个页面呈现的路径,以及原始数据的不同路径。