2014-01-23 4 views
21

Я использую встроенные параметры входа в систему с помощью Meteor, и я хотел бы перенаправить после входа пользователя в систему. Использование встроенных веб-фрагментов означает, что я не могу использовать обратный вызов с Meteor .loginwithPassword, и я не вижу никаких крючков внутри Iron-Router для перенаправления.Переадресация после входа в систему с использованием Meteor и Iron Router

Любые предложения?

+0

вы пытались это https://github.com/EventedMind/iron-router#using-hooks Router.before (mustBeSignedIn, {кроме: ['login', 'signup', 'forgetPassword']}); – pahan

+0

Я не вижу ни одного примера кода, используя это, чтобы увидеть, как его использовать – user2243825

ответ

22

Метеор часто делает так быстро, что страница загружается до того, как пользователь был определен. . Вы должны использовать Meteor.loggingIn() для учета ситуации, в которой вы в процессе лесосечных в Этот код работает для меня:

this.route('myAccount', { 
    path: '/', 
    onBeforeAction: function() { 
    if (! Meteor.user()) { 
     if (!Meteor.loggingIn()) Router.go('login'); 
    } 
    } 
} 
+12

'if (! Meteor.loggingIn()) Router.go ('login');' –

1

Вы можете просто использовать один из существующих маршрутов вы настроили в Ирландии маршрут

Router.go («/ myRouterPathToTemplate»)

+0

люблю его! Благодарю. – the0ther

+0

Можете ли вы добавить пример того, как это будет реализовано? – Chris

5

это должно быть очень легко просто добавить что-то вроде:

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;)

+0

Обратите внимание, что 'Deps' теперь называется' Tracker'. –

+0

Этот код будет находиться на стороне клиента? – mfq

+0

@mfq да, как и для отображения только шаблона. –

6

Этот пример может быть полезным

// 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'); 
});