Перенаправление после входа в систему с помощью Meteor и Iron Router
Я использую встроенные параметры loginButtons с Meteor, и я бы хотел перенаправить после входа пользователя в систему. Использование встроенных веб-фрагментов означает, что я не могу использовать обратный вызов с Meteor.loginwithPassword, и я не вижу любые крючки внутри Iron-Router, чтобы сделать перенаправление.
Любые предложения?
Ответы
Ответ 1
Метеор часто делает так быстро, что страница загружается до того, как пользователь был определен. Вы должны использовать Meteor.loggingIn()
для учета ситуации, в которой вы находитесь в процессе входа. Этот код работает для меня:
this.route('myAccount', {
path: '/',
onBeforeAction: function () {
if (! Meteor.user()) {
if (!Meteor.loggingIn()) Router.go('login');
}
}
}
Ответ 2
Этот пример может быть полезен
// main route render a template
Router.route('/', function () {
this.render('main');
});
// render login template
Router.route('/login', function () {
this.render('login');
});
// we want to be sure that the user is logging in
// for all routes but login
Router.onBeforeAction(function () {
if (!Meteor.user() && !Meteor.loggingIn()) {
this.redirect('/login');
} else {
// required by Iron to process the route handler
this.next();
}
}, {
except: ['login']
});
// add here other routes
// catchall route
Router.route('/(.*)', function () {
this.redirect('/catchallpage');
});
Ответ 3
должно быть очень просто добавить что-то вроде:
Tracker.autorun(function() {
var currentRoute = Router.current();
if (currentRoute === null) {
return;
}
if (currentRoute.route.getName() === 'login' && Meteor.user() !== null)
Router.go('WelcomeNewUser');
}
Вы также можете использовать один и тот же маршрут с другим шаблоном в случае, если пользователь не выполнил вход.
просто что-то вроде этого:
this.route('myAccount', {
before: function () {
if (!Meteor.user()) {
this.render('login');
this.stop();
}
}
}
Нет волшебства, просто просмотрел docs;)
Ответ 4
Вы можете просто использовать один из ваших существующих маршрутов, настроенных вами на маршруте в Ирландии.
Router.go( '/myRouterPathToTemplate')