2011-01-11 16 views
7

Ogni volta che un utente accede all'applicazione, desidero eseguire un determinato compito, ad esempio, registrare l'ora di accesso. Quindi volevo sapere se un hook è stato attivato all'accesso di default? Se sì, come posso far sì che il mio modulo risponda ad esso.Login hook su Google Appengine

Modifica - Si supponga che nell'applicazione siano presenti più punti di accesso per l'accesso.

+0

Accettare una risposta, o farci sapere se le risposte non sono abbastanza chiare. –

+0

Ci scusiamo per il ritardo nel ritorno a questo. Non mi dispiace che il tuo flag sia corretto, ma la mia vera domanda era se un hook viene automaticamente attivato quando un utente effettua il login. –

+0

ie Anche se seguo il principio DRY, devo chiamare il metodo all'interno di ciascuno dei miei gestori di pagine che può essere evitato se viene chiamato un hook. Corretta? –

risposta

0

Sto usando Python su GAE (quindi potrebbe essere diverso per Java) ma non ho visto alcuna documentazione su tale hook per un utente che ha effettuato l'accesso. Se hai usato uno dei framework di gestione delle sessioni probabilmente ne avrai indicazione per questo, ma altrimenti faccio questo tipo di casa mantenendo sulla mia pagina di apertura stessa che richiede il login. (Cosa vuoi fare su un utente già registrato che ritorna al tuo sito pochi giorni dopo ... cioè, vuoi davvero registrare gli accessi o l'ora di inizio di una visita/sessione ??)

Se volessi farlo, ma con più pagine di destinazione e senza utilizzare un framework di sessione, userei memcache per eseguire un controllo rapido su ogni richiesta di pagina e quindi scrivere solo sul datastore all'avvio di una nuova visita.

1

Sebbene possano esserci più punti di ingresso, è fondamentale che il codice di autenticazione/sessione sia conforme al principio DRY.

Una volta/se sei giù ad un percorso di codice unico per l'accesso, si dovrebbe essere in grado di trovare un posto adatto in quel percorso di codice per fare qualcosa di semplice come questo:

user.last_login = time 
user.num_logins++ 
user.save() 

Inoltre, potresti usare un cooldown di memcache per assicurarti che ciò accada solo una volta ogni 30 minuti:

cooldown_memcache_key = "login_cooldown_%s" % user.id 
cooldown = memcache.get(cooldown_memcache_key) 
if cooldown is None: 
    user.last_login = time 
    user.num_logins++ 
    user.save() 
    memcache.add(cooldown_key, True, 1800) 
Problemi correlati