Comments 15
nodeguide.ru/doc/dailyjs-nodepad/node-tutorial-5/#id3
В данной статье имеется хорошая реализация контроля доступа, более правильного, на мой взгляд.
В данной статье имеется хорошая реализация контроля доступа, более правильного, на мой взгляд.
«Но тогда проверка, авторизирован ли пользователь, будет выглядеть некрасиво...»
В js есть «красивое» приведение к boolean с помощью двух восклицательных знаков:
if(!!req.session.username) {}
В js есть «красивое» приведение к boolean с помощью двух восклицательных знаков:
if(!!req.session.username) {}
if (requestedUrl.match(pattern)) ...
Если не используете результат, то лучше «test»
if (pattern.test(requestedUrl)) ...
А чем лучше? Всеравно кусок «найдется» просто не возвращается во втором случае.
Вы, можно сказать, сами ответили на свой вопрос.
test — функция, по логике своей, возвращающая бинарное значение.
if — условный оператор использующий на вход тоже самое.
Вам не кажется, что они отлично подходят друг другу? :-)
Конкретно в этом случае разница по скорости ничтожна, но в целом считаю test более уместным для таких вещей. В любом случае отработает не медленней, а то и быстрее в зависимости от регулярки и количества возвращенных данных.
test — функция, по логике своей, возвращающая бинарное значение.
if — условный оператор использующий на вход тоже самое.
Вам не кажется, что они отлично подходят друг другу? :-)
Конкретно в этом случае разница по скорости ничтожна, но в целом считаю test более уместным для таких вещей. В любом случае отработает не медленней, а то и быстрее в зависимости от регулярки и количества возвращенных данных.
Если цель статьи просто показать как проверять авторизован ли пользователь или нет используя «прослойки», то имхо сильно заумно получилось.
Ну и само написание кода вызывает нарекания.
Ну и само написание кода вызывает нарекания.
Как вариант. Но я использую другой подход, который даёт больше гибкости — проверка на уровне прослоек маршрутов:
var //...
middleWare_isLogged = [auth.checkUser],
middleWare_canEditUsers = [auth.checkUser, auth.hasPrivilege('editUsers')];
app.get('/', function (req, res) {
// просто отдаём страницу
// some code here
});
app.get('/users', middleWare_isLogged, function (req, res) {
// проверям, залогинен ли пользователь
// some code here
});
app.post('/users/edit', middleWare_canEditUsers, function (req, res) {
// проверяем, имеет ли залогиненый пользователь привилегию "editUsers"
// some code here
});
подскажите пожалуйста, что такое auth?
hasPrivilege: function (priv) {
return function (req, res, next) {
// тут всяко-разные проверки - по свойствм req.session смотрим, имеет ли данный
// пользователь привилегию priv и если да - result=true.
// ну а далее либо просто передаём управление дальше если всё ок,
// либо передаём ошибку "недостаточно прав"
if (result) {
next();
}
else {
next({ msg: const.ERR_AUTH_PERMISSION_DENIED, status: 403 });
}
};
}
Sign up to leave a comment.
Простой сайт с возможностью авторизации на node.js