2013-09-06 3 views
0

Im использованием PassportJS в ExpressJS применения:PassportJS, ExpressJS, NodeJS, Создание API ж/Authentication

В 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, используя вышеуказанный подход? Благодаря

+0

Почему бы не использовать функцию согласования содержимого для экспресс-доставки? см. эту ссылку: [res.format] (http://expressjs.com/api.html#res.format) – renatoargh

ответ

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.sendensureLoggedIn, и помните, что вам может потребоваться принудительное выполнение ваших клиентов для отправки правильного заголовка accept в своих HTTP-запросах.

+1

Im, используя модуль https://github.com/jaredhanson/connect-ensure-login, где заменить ' res.send'? –

+1

Извините, я думал, что это была функция, которую вы написали сами. Посмотрите на эту проблему: https://github.com/jaredhanson/connect-ensure-login/pull/3 - Не знаете, как вам придется иметь дело с этим сценарием при использовании сторонней библиотеки. – renatoargh