2009-03-17 15 views
5

Me han dicho que no debería usar variables como params[:user_id] en mis archivos de vista. ¿Se aplica la misma regla a la variable session?Uso de la variable de sesión en mi vista

Si no, ¿qué debería hacer? Asignarlo primero a una variable de instancia y luego usar eso en la vista? Esto parece molesto, ya que tendría que hacerlo por cada una de mis acciones. Creo que podría poner este código repetitivo en un método que recibe el llamado de todas las otras acciones en esa clase.

Respuesta

7

Esta recomendación proviene de la mejor práctica de "separación de preocupaciones" entre los diferentes componentes que componen su aplicación Rails. El mejor lugar para determinar el usuario actual está en su controlador. Aquí es donde accederá a su params y/o sesión para determinar si alguien ha iniciado sesión, ya sea directa o indirectamente a través de un plugin de autenticación. Luego, si necesita esta información en su vista, simplemente guárdela en una variable como @user que estará automáticamente disponible en su vista para fines de visualización. Si lo haces de esta manera, si luego cambias tu mecanismo de autenticación puedes hacerlo sin tocar tus vistas, lo que es una buena indicación de que tienes una buena separación entre los diferentes componentes de tu aplicación.

También en respuesta a la segunda parte de su pregunta:

supongo que podría poner este código repetitivo en un método que es llamada por todas las otras acciones de esa clase .

Esto se puede hacer fácilmente con un: before_filter en su controlador, que puede apuntar hacia un método que verifica la autenticación y crea las variables de instancia necesarias para compartirse entre las acciones en el controlador.

2

Definitivamente quiere verificar params[:user_id] o session[:user_id] en cada carga de página. Si su sesión es secuestrada, podría potencialmente poner código no deseado en su vista y permitir un ataque de secuencias de comandos entre sitios.

Dicho esto, el método adecuado, utilizado en el complemento authenticated_system, es hacer referencia a un método de ayuda del usuario actual que le permite recuperar current_user.user_id.

Además, si está utilizando user_id en una llamada a la base de datos, aún debe verificarlo llamando al @selected_user = User.find(params[:user_id] y usando @selected_user.id en su vista y acción del controlador.

Obtendrá mucho más control y protección.

Cuestiones relacionadas