Я использую стандартный утюг: маршрутизатор шаблон для обеспечения того, чтобы пользователь прошел аутентификацию перед доступом к маршруту:утюг: маршрутизатор beforeAction логин AND данные: функция?
authenticatedController = RouteController.extend({
onBeforeAction: function(){
if (Meteor.user()){
var route = Router.current().route.getName();
this.next();
} else this.render('login');
})
Это работает очень хорошо для непараметризованных маршрутов, например:
Router.route("profile",{
name: "profile",
controller: 'authenticatedController'
});
Когда я попытаться распространить эту модель на параметризуемый маршрут, например:
Router.route('/foo/:id',{
name: 'foo',
controller: 'authenticatedController',
data: function(){ return myCollection.findOne({ _id: this.params.id }); } }
});
- Это работает, если пользователь уже вошел в
- Я получаю страницу 404, если пользователь не вошли в
кажется, что beforeAction работает после функции данных. Начиная с myCollection не публикует никаких документов, пока пользователь не выполнит вход в систему: маршрутизатор решает, что маршрут не существует.
Единственный раз, когда я хочу 404, если поиск коллекции ничего не возвращает.
пытались ли вы на Router.configure? 'notFoundTemplate: 'notFound',' и hook 'Router.onBeforeAction (' dataNotFound ', {only:' profile '}); ' – Ethaan
Спасибо, Ethann - У меня есть' notFoundTemplate:' notFound' - вот как показывают мои 404. Я не пробовал «Router.onBeforeAction» («dataNotFound», {only: 'profile'}); 'потому что я действительно хочу 404, если id не существует (или кто-то оставляет некоторые из них при резке/вставке URL) –