#node.js #express #https #basic-authentication
Вопрос:
Я пытаюсь настроить https-сервер и хочу использовать базовую аутентификацию на маршруте. Для этого я использую маршрутизатор для управления почтовыми запросами. Однако, если я использую приведенный ниже код, я получу ответ 200 OK без установки заголовка авторизации. Если вместо этого я использую app.listen(PORT)
Мне действительно нужно отправить его (желаемое поведение). Почему это решение игнорирует базовую аутентификацию?
const https = require("https"); const fs = require("fs"); const basicAuth = require('express-basic-auth'); const express = require('express'); function getUnauthorizedResponse(req) { return req.auth ? ('Credentials ' req.auth.user ':' req.auth.password ' rejected') : 'No credentials provided' } var app = express(); const router = express.Router(); router.post('/test', function(req, res) { response.writeHead(200, {'Content-Type': 'text/plain', 'Content-Length': message.length ''}); response.write("OK"); response.end(); }); app.use( '/', basicAuth({ users: { 'username':'pwd' }, challenge: true, unauthorizedResponse: getUnauthorizedResponse }), router ); const credentials = { key: fs.readFileSync('sslcert/server.key', 'utf8'), cert: fs.readFileSync('sslcert/server.cert', 'utf8') }; https.createServer(credentials, app).listen(3000);
Комментарии:
1.
app.listen(PORT)
создает http-сервер. Ваш другой код создает https-сервер.2. Можно ли также включить базовую аутентификацию на сервере https?
3. Да, этот модуль отлично работает с https-сервером. Я бы предложил изменить ваш
app.use()
, чтобы удалить"/"
, чтобы не было аргумента пути. Просто уходиapp.use(basicAuth(...), router);
. И затем абсолютно убедитесь, что вы тестируете правильный порт и протокол https и что сервер НЕ запущен, прежде чем запускать свой код (в случае, если предыдущая, более старая версия сервера все еще работает).