2016-02-28 1 views
2

получил довольно сложную проблему.Перенаправить пользователя на другой маршрут в зависимости от процесса регистрации в Метеор с помощью Iron Router

В моем приложении имеется процесс регистрации/установки пользователя на 5 шагов.

  1. Создать аккаунт
  2. Выберите опцию
  3. Выбрать больше вариантов
  4. Создать подписку с полоской
  5. Connect нашивки счет так приложение для чтения только доступ к данным Stripe пользователя

После этих шагов пользователь имеет доступ к панели управления.

То, что я хочу сделать, это убедиться, что

  1. Если пользователь покидает/отсоединение во время этапа, когда они снова войти в систему, они будут перенаправлены на шаг они не завершены (в настоящее время мой Логин отправить обработчик перенаправляет прямо на приборную панель, поэтому я не уверен, как с этим справиться)
  2. Как только пользователь выполнил все шаги, если они будут перемещаться по маршруту шага, они не смогут, он просто перейдет на приборную панель

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

Я использую Iron Router, и я думаю, что ответ может заключаться в onBeforeAction, но я не уверен на 100%.

Любая помощь оценена!

ответ

2

Мне действительно удалось это сделать, поэтому я подумал, что отправлю сообщение всем, у кого есть аналогичная проблема.

Я продлил маршрут контроллера для маршрутов, которые я хочу защитить. Расширенный контроллер вызывает метод метеор, который возвращает значение в базе данных, которое сохраняется, когда пользователь завершает этап регистрации. Я сохранил это значение как строку, которая является маршрутом, к которому пользователь должен быть перенаправлен.

Итак, когда пользователь подписывает и завершает этап 2, затем выходит из системы, что происходит.

  1. приложение знает, что они выполнили шаг 2 так сохраняет маршрут для шага 3 в поле на документе пользователя (например. Meteor.user().loginRedirectTo = '/subscribe')
  2. Пользователь возвращается и входит в систему, то loginhandler имеет onBeforeAction, который вызывает метод метеор, который возвращает значение из базы данных в маршрутизатор, где пользователь должен идти дальше.
    1. Router отправляет пользователей на эту страницу.

Вот код для этого

Расширенная Контроллер:

StageController = RouteController.extend({ 
    onBeforeAction: function() { 
    Meteor.call('getUserRedirect', function(error, route) { 
     if(error) { 
     console.log(error); 
     } else { 
     Router.go(route); 
     } 
    }); 
    this.next(); 
    } 
}); 

метод Meteor для возврата пользователю маршрут должен пойти:

Meteor.methods({ 
    'getUserRedirect': function() { 
     if(!Meteor.userId()) { 
      throw new Meteor.Error(401, "You aren't even logged in, stop calling methods!"); 
     } 
     var user = Meteor.user(); 
     var redirectRoute = Meteor.user().loginRedirectTo; 
     return redirectRoute; 
    } 
}); 

И, наконец, назначить что контроллер для каждого из маршрутов с помощью этого кода:

Router.route('/dashboard', { 
    template: "dashboard", 
    name: "dashboard", 
    controller: "StageController" 
}); 
+1

Вы можете установить beforeAction для всех маршрутов без контроллеров. –

+0

Я не хочу, чтобы это происходило для всех маршрутов, только для маршрутов в моем регистровом процессе. Поэтому добавление нового контроллера кажется лучшим способом сделать это – Sean