Hubot / Express: отключить базовую аутентификацию на определенном маршруте

#node.js #express #basic-authentication #hubot

#node.js #экспресс #базовая аутентификация #hubot

Вопрос:

Я использую Hubot, и я определил переменные среды EXPRESS_USER и EXPRESS_PASSWORD для включения базовой аутентификации. Hubot использует express и в основном это

 setupExpress: ->
    user    = process.env.EXPRESS_USER
    pass    = process.env.EXPRESS_PASSWORD
    stat    = process.env.EXPRESS_STATIC

    express = require 'express'

    app = express()

    app.use (req, res, next) =>
      res.setHeader "X-Powered-By", "hubot/#{@name}"
      next()

    app.use express.basicAuth user, pass if user and pass
    app.use express.query()
    app.use express.bodyParser()
    app.use express.static stat if stat`
 

Я хочу предоставить HTTP-команду в скрипте, который не нуждается в базовой аутентификации. Однако я не могу изменить изменить код в Hubot, где выражается его инициализация

 robot.router.get '/some-anonymous-path', (req, res) ->
  console.log 'Should be here without need to authenticate
 

Кто-нибудь знает, возможно ли это сделать в expressjs?

Заранее спасибо

Бруно

Ответ №1:

Как насчет того, чтобы поместить nginx перед вашим Hubot? Затем вы также можете добавить SSL, разрешить доступ только к определенным путям, переписать URL-адреса или даже обслуживать статический контент, созданный скриптами hubot. Простой пример блока nginx.conf:

 upstream hubot {
  server localhost:8080;
}
server {
  listen 80;
  satisfy any;
  allow 127.0.0.1;
  deny all;
  location ~ ^/(public|obscured) {
    allow all;
    proxy_pass http://hubot;
  }
  location ~ ^/(static) {
    auth_basic "Restricted";
    auth_basic_user_file htpasswd;
    root /www;
  }
  location ~ {
    auth_basic "Restricted";
    auth_basic_user_file htpasswd;
    proxy_pass http://hubot;
  }
}
 

Затем добавьте пару htpasswd в /etc/nginx/htpasswd и в свой набор сценариев инициализации BIND_ADDRESS=localhost hubot (привязка по умолчанию 0.0.0.0), и вы отправитесь в гонки.