В Meteor, как загрузить какой-либо файл только для зарегистрированных пользователей?

Я пытаюсь создать панель администратора с помощью Meteor. Я не хочу загружать файлы js и html, связанные с панелью администратора, для обычного пользователя. Нужно загружать их только тогда, когда пользователь вошел в систему. Как я могу этого добиться? (Я использую FlowRouter для управления маршрутами)


person THpubs    schedule 07.11.2015    source источник
comment
Короткий ответ: вы не можете, если вы не загружаете их отдельно, структура проекта Meteor по умолчанию просто не позволяет этого. Я напишу более длинный ответ, если никто не сделал это позже сегодня.   -  person Kyll    schedule 07.11.2015
comment
@Kyll Спасибо :-) Жду вашего длинного ответа. Разве это не угроза безопасности? Извините, я новичок в Метеоре.   -  person THpubs    schedule 07.11.2015


Ответы (2)


Во-первых, давайте позаботимся о том, когда на самом деле загружать файлы. Meteor.user() — это реактивный источник данных, который мы можем использовать в Вычисления трекера :

Tracker.autorun(() => {
  if(Meteor.user()) {
    loadUserFiles()
  }
})

Вы можете загрузить эти файлы с помощью HTTP-запроса, DOM, jQuery, вашей собственной магии DDP...
Вопрос о том, как их загрузить, довольно обширен. Просто убедитесь, что на стороне сервера проверяется, что запрашивающий является зарегистрированным пользователем.

Теперь есть две разные категории файлов, которые вы можете загрузить таким образом в зависимости от вашего варианта использования:

Основные файлы ресурсов

К ним относятся CSS, изображения, HTML, JS, видео или музыкальные (...) файлы, с которыми вы хотите возиться и добавлять их в DOM. То, как вы это сделаете, похоже на любой другой запрос ресурсов, уже существует множество ресурсов, чтобы сделать это красиво с комбинацией запросов jQuery/Node, и вам не нужно ничего менять, чтобы это работало в Meteor.
Вы может потребоваться работа с WebApp.rawConnectHandlers для проверки пользователя на стороне сервера, если вы используете HTML-запросы. .

Файлы шаблонов HTML

Это сложнее. нельзя запретить клиенту доступ к полученным им шаблонам. Поскольку шаблоны компилируются на стороне сервера и отправляются в виде кода JavaScript, для отправки шаблона части ваших пользователей вам необходимо изменить способ сборки файлов Meteor (или, возможно, использовать тщательно созданный пакет), чтобы иметь возможность загружать шаблоны отдельно.
Однако я не думаю, что это правильный подход. Шаблон — это просто способ показать данные. Если вы контролируете, кому вы отправляете данные, то, если вышедший из системы пользователь получит доступ к защищенному шаблону, он увидит только ошибки и пробелы.

Обратите внимание, что файлы помощников шаблонов попадают в категорию «Основные ресурсы», поэтому имеет смысл загружать некоторые дополнительные помощники таким образом. Вы избавите вышедших из системы клиентов от мертвого кода.

person Kyll    schedule 09.11.2015

используемый глобальный помощник

Template.registerHelper('isLoged', function () {return Meteor.userId() != null});

if(isLoged()) {// yes login user} else { //redirect }
person Jonathan Escobar    schedule 09.11.2015