Узел.JS Экспресс-базовая аутентификация по протоколу https

#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 и что сервер НЕ запущен, прежде чем запускать свой код (в случае, если предыдущая, более старая версия сервера все еще работает).