Acts as authenticated


#1

Ciao,

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.

Come mi conviene fare?

Saluti Andrea_______________________________________________
Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


#2

On 12/25/06, stb removed_email_address@domain.invalid wrote:

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

private
  def login_required
    # ...
  end



Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto


#3

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:


#4

ah ecco quindi dipende dal valore di ritorno, bene allora penso di
aver risolto il problema, grazie mille

Saluti Andrea

Il giorno 26/dic/06, alle ore 21:50, Antonio C. ha scritto:


#5

On 12/26/06, stb removed_email_address@domain.invalid wrote:

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.

Ciao,
Antonio


Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto


#6

On 12/27/06, Paolo M. removed_email_address@domain.invalid wrote:

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:

before_filter :login_required, :only => [ :edit, :delete ]

oppure alternativamente, le azioni che vuoi escludere:

before_filter :login_required, :except => [:list, :index, :show]

Ciao,
Antonio


Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto


#7

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?

Paolo


#8

ho qualche problema con login_required

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?

questo è il mio controller actions
http://pastie.caboo.se/29932

Saluti Andrea

Il giorno 28/dic/06, alle ore 03:51, Antonio C. ha scritto: