0

我在 ExpressJS 应用程序中使用 PassportJS:

app.js,我有仅管理员和requiresAdmin功能的路线:

var requiresAdmin = function() {
    return [
        ensureLoggedIn('/login'),
        function(req, res, next) {
            if (req.user && req.user.admin === true){
                next();
            }else{
                res.send(401, 'Unauthorized');
            }
        }
    ];
};

app.all('/admin/*', requiresAdmin());

我创建了另一个返回 JSON 对象的路由。管理员也可以访问。

app.all('/api/admin/*', requiresAdmin());

如果用户未登录或非管理员,如何使用上述方法返回 JSON?谢谢

4

1 回答 1

1

我将使用 Express.js 内容协商功能,只需将您的 res.send 替换为以下内容:

res.format({
  'text/plain': function(){
    res.send(401, 'Unauthorized');
  },

  'application/json': function(){
    res.send(401, { message: 'Unauthorized' });
  }
});

更多信息在这里:http ://expressjs.com/api.html#res.format

不要忘记替换您的res.sendinside ensureLoggedIn,并记住您可能需要强制您的客户accept在其 http 请求中发送正确的标头。

于 2013-09-06T02:50:30.507 回答