【问题标题】:Prevent html rendering from a non-browser GET request防止来自非浏览器 GET 请求的 html 呈现
【发布时间】:2016-05-06 10:21:16
【问题描述】:

我目前正在使用 Node & Express 来构建我的应用程序

我的认证功能如下:

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 });
});

这样所有的功能都适用于从浏览器呈现的个人资料页面。但是,如果用户已登录并向localhost/profile 发送GET 请求,则会将整个页面连同所有用户详细信息一起发回。

问题是我正在使用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
}));

使用简单会话不会触发来自非浏览器 GET 请求的 req.isAuthenticated(),而是呈现我重定向到的登录页面(这很好)。

app.use(session({
        key: 'connect.sid',
        secret: 'secret',
        resave: true,
        saveUninitialized: true
}));

那么,我怎样才能保持与 connect-mongo 的持久连接,并防止用户通过身份验证的所有页面被呈现?我应该寻找一个特定的标题吗?

提前致谢。

【问题讨论】:

    标签: node.js mongodb express connect-mongo


    【解决方案1】:

    您可以查看用户代理标头,看看它是否是浏览器。您可以使用 express-useragent 之类的东西来帮助您。

    User-Agent 标头不是必需的,可以被欺骗,因此不应被视为绝对真理。

    我不认为你的路由应该根据它认为客户端是什么或不是什么而表现不同。您应该有一个用于页面渲染的路由,以及一个用于原始数据的不同路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 2016-09-14
      • 2011-06-19
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多