Задать вопрос
@IvanRobot

Как изменить директорию express.static после обнаружения токена?

Помогите пожалуйста! Я делаю приложение, в котором в зависимости от наличия токена выдаются Routes, директория с файлами, и шаблон для отправки. Я сделал так:

var jwt = require('express-jwt');

var check_token = jwt({
    secret: 'LOVE',
    credentialsRequired: false,
    getToken: function fromHeaderOrQuerystring (req) {

        if (req.headers.authorization &&
            req.headers.authorization.split(' ')[0] === 'Bearer') {
            var token = req.headers.authorization.split(' ')[1];
            return token;
        }

        else if (req.query && req.query.token) {
            return req.query.token;
        }

        return null;
    }
});

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

app.use(check_token, function (req, res, next) {

    if (!req.user) res.render('public');
    return next();

});

app.use('/blocks', blocks_private);
app.use(express.static(__dirname + '/private'));
app.use(function (req, res, next) {
    res.render('private');
});


В итоге, после онаружения токена клиент получает `private` шаблон, но не получает внешние файлы из директории `/private`.

a2590338640244cebce363a293a716b7.png

Как изменить директорию express.static после получения токена?

UPD:
Кажется, я понял в чём проблема. Токен берётся из `LocalStorage` и через `javascript` встраивается в запрос. То есть при первом запросе получаю шаблон `private`, но затем из шаблона начинают запрашиваться внешние файлы и эти запросы уже идут без токена, поэтому и не определяется директория `/private`. Возможно, нужно отказаться от `LocalStorage` и перенести токен в cookie ?
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
dummyman
@dummyman
диссидент-схизматик
Вероятнее всего, вы имеете middleware для ответа 404 и он срабатывает по цепочке перед вторым express.static.
Причем, смотрите, файлы будут доступны для всех независимо, авторизован пользователь или нет. И если файл с одним названием существует и в /public и в /private, то всегда будет отдаваться тот, который подключен app.use() ранее.

Использование двух express.static - плохая практика, ищите другие пути решения задачи =)
Ответ написан
Комментировать
@SergeyBugai
Как то так должно работать
app.use((req,res,next)=>{
if(...){
   express.static( __dirname + '/public' )
}else {
   express.static(__dirname + '/private')
}
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы