2009-03-17 12 views
5

Mi è stato detto che non dovrei usare variabili come params[:user_id] nei miei file di visualizzazione. La stessa regola si applica alla variabile session?Uso della variabile di sessione a mio avviso

Se no, allora cosa dovrei fare? Assegnarlo prima a una variabile di istanza e quindi utilizzarlo nella vista? Questo sembra fastidioso come dovrei farlo per ciascuna delle mie azioni. Immagino di poter inserire questo codice ripetitivo in un metodo che viene chiamato da tutte le altre azioni in quella classe.

risposta

7

Questa raccomandazione deriva dalla migliore pratica di "separazione delle preoccupazioni" tra i diversi componenti che compongono la vostra app Rails. Il posto migliore per determinare l'utente corrente è nel tuo controller. È qui che si accede ai parametri e/o alla sessione per determinare se qualcuno ha effettuato l'accesso, direttamente o indirettamente tramite un plug-in di autenticazione. Quindi, se hai bisogno di queste informazioni nella tua vista, memorizzale in una variabile come @user che sarà automaticamente disponibile nella tua visualizzazione per scopi di visualizzazione. Facendolo in questo modo, se in seguito cambi il tuo meccanismo di autenticazione puoi farlo senza toccare le tue visualizzazioni, il che è una buona indicazione per te che hai una buona separazione tra i diversi componenti nella tua app.

anche in risposta alla seconda parte della tua domanda:

Credo che avrei potuto inserire questo codice ripetitivo in un metodo che viene chiamato da tutte le altre azioni in quel classe.

Questo può essere fatto facilmente con un: before_filter nel vostro controller, che si può puntare verso un metodo che controlla l'autenticazione e crea eventuali variabili di istanza necessarie per essere condivisi tra le azioni in vostro controller.

2

Sicuramente si desidera verificare params[:user_id] o session[:user_id] su ogni caricamento della pagina. Se la tua sessione viene dirottata, potresti potenzialmente inserire codice indesiderato nella tua vista e consentire un attacco di scripting cross-site.

Detto questo, il metodo corretto, utilizzato nel plug-in authenticated_system, è fare riferimento a un metodo helper current_user che consente di recuperare current_user.user_id.

Inoltre, se si sta utilizzando id_utente in una chiamata al database, è comunque necessario verificarlo chiamando @selected_user = User.find(params[:user_id] e utilizzando @selected_user.id nella visualizzazione e nell'azione del controller.

Otterrete molto più controllo e protezione.

Problemi correlati