2015-08-15 14 views
6

Ich möchte überprüfen, ob der Benutzer über Meteor.user() in OnBeforeAction in meinen Routen angemeldet ist. Problem ist, nach einer Seite neu zu laden Meteor.user() gibt undefined für einen Bruchteil einer Sekunde, bevor es geladen wird.Meteor.user() gibt undefined nach dem erneuten Laden der Seite zurück

Hier meine Route config:

Router.map(function() { 
    this.route('list', { 
     path: '/list', 
     template: 'list', 
     onBeforeAction: function(){ 
      console.log('onBeforeAction'); 
      if(!Meteor.user()){ 
       Router.go('/login'); 
      } 
      this.next(); 
     } 
    }); 
}); 

ich gegoogelt viel und die Abhilfen mit "WaitOn" und "Rückkehr Meteor.user();" scheint in meinem Fall nicht zu funktionieren. Auch interessant ... lokal funktioniert es einwandfrei, so dass ich eine Seite neu laden kann und immer noch in der "Listenansicht" bleibe, aber die auf Modulus deployte App verhält sich wie oben beschrieben und leitet zur Anmeldeseite weiter.

Irgendwelche Ideen? Danke im Voraus.

Antwort

6

Es ist besser, !!Meteor.userId() zu verwenden, um zu überprüfen, ob ein Benutzer angemeldet ist, da während des Wartens auf das Laden der Benutzerdaten vom Server keine Wartezeit auftritt. In der Tat ist Meteor.user Routine mehr oder weniger entspricht.

function() { 
    return Meteor.users.findOne({ _id: Meteor.userId() }); 
} 

, die erklärt, warum es undefined auch wenn der Benutzer angemeldet ist zurückkehren

+0

Dank, das funktioniert ... easy fix :) –

+0

Ist Gibt es einen Unterschied zwischen 'if (Meteor.userId())' und 'if (!! Meteor.userId())'? – Acute

Verwandte Themen