premetto che non ho ancora visto in maniera approfondita il
funzionamento del plugin, tttavia ho implementato il login e il
logout, entrambi funzionanti senza problemi.
La questione è banale, ho un controller di nome actions che mi
contiene tute le “azioni” che un utente registrato può fare e
ovviamente non ho voglia di implementare per ciascun metodo un if per
controllare il login.
Per farla breve vorrei che se l’ utente non è loggato, qualsiasi
azione di quel controller mi restituisce un’ alert informando l’
utente e blocando ogni altra azione.
controllare il login.
Per farla breve vorrei che se l’ utente non è loggato, qualsiasi
azione di quel controller mi restituisce un’ alert informando l’
utente e blocando ogni altra azione.
Come mi conviene fare?
Inserisci nel tuo controller before_filter :login_required dove
login_required è un metodo privato che verifica se l’utente è loggato, e
gestisce la situazione se non lo
è:
before_filter :login_required
mmm capito, ma in login required come faccio a bloccare o lasciar
eseguire le azioni?
Cioè dentro il metodo avrò una cosa del tipo IF logged?(ora nn
ricorda cosa usa) e se ok mi fa l’azione chiamaa altrimenti mi rida
un’ alert
Il giorno 25/dic/06, alle ore 17:29, Antonio C. ha scritto:
mmm capito, ma in login required come faccio a bloccare o lasciar
eseguire le azioni?
Cioè dentro il metodo avrò una cosa del tipo IF logged?(ora nn
ricorda cosa usa) e se ok mi fa l’azione chiamaa altrimenti mi rida
un’ alert
login_required viene invocato prima che una qualsiasi azione nel tuo
controller venga eseguita. Se il valore restituito da questo metodo
è false,
l’azione non viene eseguita, mentre se il valore è true, allora l’utente è
“loggato” e si passa direttamente all’esecuzione dell’azione nel
controller.
Per cui il tuo login_required può somigliare a qualcosa del tipo:
def login_required
if current_user
return true
end
flash[:warning]=‘Effettua il login’
session[:return_to]=request.request_uri
redirect_to :controller => “utente”, :action => “login”
return false
end
Assumendo che tieni traccia dell’utente nella variabile current_user, se
questo esiste allora l’utente è già autenticato e possiamo restituire true
per passare direttamente all’azione invocata. Se questo non è il caso,
inviamo un messaggio di avviso, reindirizziamo l’utente verso l’azione
di
login e restituiamo false perché l’utente non è loggato.
Ilsession[:return_to]=
request.request_uri ti permette di tenere traccia dell’azione a cui
l’utente
voleva accedere prima di dover effettuare il login, in questo modo nel
metodo che effettua il login, una volta loggato, potrai reindirizzare
l’utente all’azione richiesta. Questo è il meccanismo generale, ovviamente
adatta il codice ai nomi scelti da te e alle tue esigenze.
Io normalmente nel filtro implemento anche un controllo sulle URL.
Poiché di solito ci sono un po’ di view a cui si vuol fare accedere
anche chi non è autenticato, prima ho una whitelist di URL a cui tutti
possono andare e poi ho il controllo sull’essere loggati o no che in
sostanza funziona come ha descritto Antonio.
Mi viene in mente ora una cosa: non è che si possono per caso realizzare
questi filtri con il routing?
Ciao Paolo,
se ho capito bene quello che vuoi fare, non hai bisogno di implementare
nulla.
Puoi indicare quali sono le azioni che vuoi includere:
prima di tutto login_required ce l’ho già definita dal plugin,
inoltre ha dei comportamenti strani.
per qualsiasi azione(escluso il metodo “t”) presente nel mio
controler, se non sono loggato non mi fa niente. Invece per il metodo
di test “t”(quello in fondo) mi reindirizza alla pagina di login.
Ho provato anche a ridefinire login_reuired nel mio controller
sperando che andasse in override ma senza successo.
Cosa sto sbagliando?