Sembra che Deps.autorun sia la strada da percorrere ma Router.go non sembra funzionare all'interno di Deps.autorun.Come reindirizzare dopo che l'utente ha appena effettuato l'accesso o appena disconnesso
risposta
Ecco un esempio con tre percorsi: index
, signin
e dashboard
:
Router.configure({layoutTemplate: 'layout'});
Router.map(function() {
this.route('index', {path: '/'});
this.route('signin');
this.route('dashboard');
});
var mustBeSignedIn = function(pause) {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('signin');
} else {
this.next();
}
};
var goToDashboard = function(pause) {
if (Meteor.user()) {
Router.go('dashboard');
} else {
this.next();
}
};
Router.onBeforeAction(mustBeSignedIn, {except: ['signin']});
Router.onBeforeAction(goToDashboard, {only: ['index']});
Se un utente è alla pagina index
e lei è connesso, si verrà automaticamente indirizzato alla pagina dashboard
. Su qualsiasi pagina tranne per signin
, se l'utente non ha effettuato l'accesso, verrà indirizzata alla pagina signin
. onBeforeAction
è reattivo, quindi queste regole verranno applicate immediatamente se l'utente esegue il login o l'uscita.
Naturalmente i percorsi saranno diversi, ma si spera che questo esempio illustri un modo per farlo funzionare con iron-router.
Vedere anche la sezione using hooks di iron-router guide.
var mustBeSignedIn = function(pause) {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('signin');
} else {
this.next();
}
};
var goToDashboard = function(pause) {
if (Meteor.user()) {
Router.go('dashboard');
} else {
this.next();
}
};
FYI, pause() non è supportata ora, basta sostituire con this.next()
Un paio di cose di cui sopra sembrano essere superate. Ecco come sono riuscito a far funzionare le cose al momento:
Router.configure({
layoutTemplate: 'Layout'
});
Router.map(function() {
this.route('index', {path: '/'});
this.route('login');
this.route('home');
});
var mustBeSignedIn = function() {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('login');
} else {
this.next();
}
};
var goHome = function() {
if (Meteor.user()) {
Router.go('home');
} else {
this.next();
}
};
Router.onBeforeAction(mustBeSignedIn, {except: ['login']});
Router.onBeforeAction(goHome, {only: ['index', 'login']});
cosa è "goToPick'? – Warz
Era un errore di battitura. Grazie per la segnalazione. –
Utilizzando questo approccio, è necessario creare un indice modello vuoto. Destra? Altrimenti, Meteor lancia un'eccezione. –