2014-04-06 2 views

risposta

17

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.

+0

cosa è "goToPick'? – Warz

+0

Era un errore di battitura. Grazie per la segnalazione. –

+1

Utilizzando questo approccio, è necessario creare un indice modello vuoto. Destra? Altrimenti, Meteor lancia un'eccezione. –

4
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()

7

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