2013-05-03 13 views
18

Quindi sono piuttosto nuovo al framework meteor e JavaScript in generale, ma sto lavorando su un piccolo progetto usando il framework per cercare di portarmi a zero. Fondamentalmente sto lavorando su un sito di micro blog.Meteor.js su evento login

Al momento gli utenti sono in grado di accedere tramite diversi servizi, fb, google ecc. E recupero i loro avatar tramite l'ID del servizio inserito nell'url necessario, tutto funziona correttamente. Ma voglio che l'utente sia in grado di vedere il proprio avatar non appena si collegano, il che significa che ho bisogno di eseguire alcuni JavaScript subito dopo aver effettuato il login. In questo momento non riesco a trovare nulla su un evento in stile onLogin. E hanno hackerato insieme un modello di manubri per eseguire il codice quando un utente esegue l'accesso. Tuttavia, questo codice sembra essere eseguito una sola volta e se un utente si disconnette e poi di nuovo non vede più il proprio avatar.

Qualcuno sa di un evento che posso usare per fare questo?

qui è il mio modello di hacky

{{#if currentUser}} 
    {{> userInput}} 
{{/if}} 

Ecco l'js si chiama

$('#inputAvatar').css('background-image', 'url('+avatarUrl+')'); 

Vorrei davvero apprezzare l'aiuto, io sono sicuro che è qualcosa di semplice che ho trascurato ma io non riesco a capirlo!

Grazie, Peter.

risposta

17

Non so se il modo in cui si sta facendo è la più appropriata, ma personalmente quanto segue sul lato client per rilevare se un utente iscritto:

Tracker.autorun(function(){ 
    if(Meteor.userId()){ 
    //do your stuff 
    } 
}); 
+0

Grazie, sapeva che era qualcosa di ovvio! Il codice funziona bene ora, ma per qualche motivo il mio codice per aggiornare l'immagine di sfondo non funziona. Noterò che funziona quando lo si immette nella console chromes ma non quando viene eseguito dal metodo Deps.autorun '$ ('# inputAvatar'). Css ('background-image', 'url (\' + avatarURL + ') \ ')'); ' –

+0

** AGGIORNAMENTO ** Ho effettivamente risolto il problema con la funzione .rendered per il mio modello combinato con la funzione Deps.autorun. Grazie per tutto l'aiuto! –

+0

Posso chiedere perché è necessario eseguire questo sul client? In questo momento mi sta davvero confondendo con ciò che Metoer.userId() fa sul server. – MurWade

2

Se si utilizza Google login o qualsiasi altro login o-auth, è possibile passare una funzione di callback che verrà eseguita dopo il login,

Ecco il codice di esempio.

Meteor.loginWithGoogle({ 
    requestPermissions: ['email'] 
}, function(error) { 
    if (error) { 
    console.log(error); //If there is any error, will get error here 
    }else{ 
    console.log(Meteor.user());// If there is successful login, you will get login details here 
    } 
}); 
+0

I callback devono essere disponibili per qualsiasi metodo Meteor.loginWith (), incluso Meteor.loginWithPassword(). Non voglio che il riferimento a OAuth faccia scappare qualcuno qui. https://docs.meteor.com/api/accounts.html#Meteor-loginWithPassword –