В Express.JS есть встроенный middleware для авторизации. Если очень хочется заблокировать доступ к приложению — достаточно всего лишь добавить одну строчку в сетап express-приложения:
Так же middleware поддерживает асинхронный вариант — с коллбэком:
А если нужно ограничить доступ только к определенным url'ам — middleware можно использовать не глобально, а только в рамках роутера. То есть так:
Если не забираться под капот — на этом можно и закончить. Тех же, кто на диаграмме Венна находится между кругами «Мне интересно, что внутри» и «Я не знаю как работает basic авторизация apache», приглашаю под кат.
basicAutn достался express в наследство от connect. Устроен он достаточно просто — когда браузер запрашивает страницу у сервера, сервер сообщает браузеру о необходимости авторизации с помощью заголовка
В ответ на это, браузер рисует форму ввода логина и пароля, и, дождавшись, когда пользователь покончит со вводом, отправляет повторный запрос к серверу. На этот раз запрос уже будет содержать заголовок
Теперь браузер будет прикреплять эту строку к каждому запросу, а basicAuth будет прилежно проверять, верные ли данные пользователя указаны в запросе. Этот механизм не отличается безопасностью, но если нужно быстро и просто ограничить доступ к проекту — это вполне подойдет.
// Работает синхронно, то есть морозит всю nodeJS
app.use(express.basicAuth('username', 'password'));
Так же middleware поддерживает асинхронный вариант — с коллбэком:
app.use(express.basicAuth(function(user, pass, callback) {
var result = (user === 'testUser' && pass === 'testPass');
callback(null /* error */, result);
}));
А если нужно ограничить доступ только к определенным url'ам — middleware можно использовать не глобально, а только в рамках роутера. То есть так:
var auth = express.basicAuth(function(user, pass, next) {
var result = (user === 'testUser' && pass === 'testPass');
next(null, result);
});
app.get('/home', auth, function(req, res) {
res.send('Hello World');
});
Если не забираться под капот — на этом можно и закончить. Тех же, кто на диаграмме Венна находится между кругами «Мне интересно, что внутри» и «Я не знаю как работает basic авторизация apache», приглашаю под кат.
basicAutn достался express в наследство от connect. Устроен он достаточно просто — когда браузер запрашивает страницу у сервера, сервер сообщает браузеру о необходимости авторизации с помощью заголовка
WWW-Authenticate:res.statusCode = 401;
res.setHeader('WWW-Authenticate', 'Basic realm="' + realm + '"');
res.end('Unauthorized');
В ответ на это, браузер рисует форму ввода логина и пароля, и, дождавшись, когда пользователь покончит со вводом, отправляет повторный запрос к серверу. На этот раз запрос уже будет содержать заголовок
Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=, где dXNlcm5hbWU6cGFzc3dvcmQ= — это, ни что иное, как строка 'username:password'. В этом легко убедиться:var str = new Buffer('dXNlcm5hbWU6cGFzc3dvcmQ=', 'base64').toString()
console.log(str) // выведет 'username:password'
Теперь браузер будет прикреплять эту строку к каждому запросу, а basicAuth будет прилежно проверять, верные ли данные пользователя указаны в запросе. Этот механизм не отличается безопасностью, но если нужно быстро и просто ограничить доступ к проекту — это вполне подойдет.
Исходный код того, что происходит внутри basicAuth можно прочитать в документации к connect.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:
- Massacres That Matter - Part 1 - 'Responsibility To Protect' In Egypt, Libya And Syria
- Massacres That Matter - Part 2 - The Media Response On Egypt, Libya And Syria
- National demonstration: No attack on Syria - Saturday 31 August, 12 noon, Temple Place, London, UK
Комментариев нет:
Отправить комментарий