Как предоставить доступ к папке после аутентификации в nodejs с помощью express? - PullRequest
0 голосов
/ 05 июля 2018

Я новичок в nodejs и уже давно ищу решение, и, к сожалению, никто не решает мою конкретную проблему. Или, по крайней мере, я просто не понимаю.

В моем проекте nodejs я использую общую папку, в которой хранятся все мои html и js файлы.

В server.js, который находится вне общей папки, которую я делаю:

app.use(express.static(__dirname + '/public'));

Конкретный пользователь, назовем его Том, получит доступ к tom-page.html. Другой пользователь, назовем его Фред, получит доступ к fred-page.html. Эти файлы и их сценарии (javascript) находятся в этой общей папке.

Теперь я пытаюсь защитить общую папку статическим паролем. Если Том входит в систему, он должен быть перенаправлен в /public/tom-page.html, а для Фреда это должно быть /public/fred-page.html. И они должны иметь доступ ко всем остальным файлам в этой папке.

Что я сделал до сих пор:

const express = require('express');
const app = express();
var basicAuth = require('basic-auth');
var is_tom = false;

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);
  };

  if (user.name === 'fred' && user.pass === 'fred-pwd') {
    is_tom = false;
    return next();
  } else if (user.name === 'tom' && user.pass === 'tom-pwd') {
    is_tom = true;
    return next();
  } else {
    return unauthorized(res);
  }
};

const http = require('http');
server = http.createServer(app);

app.get('/', auth, function(req, res) {
  if (is_tom) {
    res.send('hi tom');
  } else {
    res.send('hi fred');
  }
});

Это работает. Но я не знаю, как предоставить им доступ к общедоступной папке app.use(express.static(__dirname + '/public'));, а также перенаправить их на их страницу.

Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете поместить все страницы в папку WEB-INF, этот каталог доступен только для вашего приложения. Если пользователь вошел в систему, вы можете отправить его в файл в этой папке.

0 голосов
/ 05 июля 2018

Я только что нашел решение, которое работает:

app.use(auth, express.static(__dirname + '/public'));

Я только что установил auth, прежде чем указывать используемую статическую папку. У кого-нибудь есть лучшее предложение?

...