2015-06-04 27 views
7

Sto costruendo un'applicazione utilizzando Meteor. Voglio creare un nuovo ID carrello (per fungere da carrello in cui posso memorizzare gli oggetti) ogni volta che un utente accede alla mia applicazione. Tuttavia, ogni volta che apro una nuova pagina nell'applicazione, viene creato un nuovo ID carrello. Significa che l'applicazione "accede" ogni volta che faccio clic su una nuova pagina nell'app? Ecco il mio codice:Account onLogin hook Meteor loop

Accounts.onLogin(function(user){ 
      var newCartId = uuid.new() 
      Meteor.users.update({_id: user.user._id}, {$set: {'profile.cartId': newCartId}}) 
      console.log('just created a new Cart ID at ' + Date()); 
    }); 

risposta

10

Sì, questo è vero.

Ogni volta che apri una nuova pagina non hai effettuato l'accesso. Quando il token localStorage ti autentica, in modo simile a come fa un cookie, hai effettuato l'accesso automaticamente. Questo hook verrà eseguito anche quando si effettua l'accesso automaticamente.

È difficile definire il modo in cui un utente effettua l'accesso. Il gancio onLogin di Meteor attiva qualsiasi tipo di metodo di accesso.

È possibile personalizzare quando si desidera che il gancio a correre, però:

Accounts.onLogin(function(info) { 

    if(info.methodName == "createUser") { 

     console.log("This user logged in by signing up"); 


    }else if(info.type == "password") { 

     console.log("This user logged in by using his/her password"); 


    }else if(info.type == "resume") { 

     console.log("This user logged in using a localStorage token"); 
    } 
}); 

Così qui si può fare il fuoco dell'evento solo quando un utente si collega utilizzando la propria password. O anche quando si iscrivono. Puoi usarlo per escludere l'esecuzione del tuo hook se l'utente apre una nuova pagina, che usa il token localStorage per registrarsi.

+0

aggiornamento: 'info' restituisce' undefined' –

+0

@DariuszSikorski Ciò può accadere se si effettua il login in un modo leggermente più insolito. Potrebbe valere la pena di presentare un ticket github sul tracker dei problemi di Meteor: github.com/meteor/meteor con qualche codice riproducibile. – Akshat

+0

Proprio così, ho usato "account-facebook" per verificare questo codice. –