Порой необходимо закрыть какую-то часть web-приложения, при этом доступ туда разрешён одному-двум заранее известным пользователям. В таких случаях для простоты можно воспользоваться давно известным приёмом – “базовая аутентификация”.
Начните с простого middleware, и вставьте его в части которые необходимо закрыть.
1 2 3 4 5 6 7 8 9 10 |
var auth = function (req, res, next) { function unauthorized(res) { res.set('WWW-Authenticate', 'Basic realm=Authorization Required'); return res.send(401); }; return unauthorized(res) }; app.use('/admin', auth, adminRouter) |
Откройте в браузере /admin
и… можно вставить любой логин/пароль. Пока проверка не работает, но это легко поправить. В первую очередь, понадобится модуль basic-auth, который парсит заголовки запроса, а именно часть authorization – req.headers.authorization. Установите его npm i --save basic-auth
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
var basicAuth = require('basic-auth'); //... var auth = function (req, res, next) { function unauthorized(res) { res.set('WWW-Authenticate', 'Basic realm=Authorization Required'); return res.send(401); }; var user = basicAuth(req); // Если пользователь не ввёл пароль или логин, снова показать форму. if (!user || !user.name || !user.pass) { return unauthorized(res); }; // Если логин admin, а пароль superChargePassword перейти к // следующему middleware. if (user.name === 'admin' && user.pass === 'superChargePassword') { return next(); } else { return unauthorized(res); }; return unauthorized(res); }; |