2010-11-20 7 views
18

Estoy usando idear con rails 3 y estoy tratando de crear una página que pueda ser vista por todos (incluso aquellos que no están registrados) pero que tiene funcionalidad adicional para las personas que están registradas.¡Cómo conseguir que el usuario actual use el dispositivo en rieles sin usar autenticación! en el controlador

¡El problema es que cuando llamo current_user no hay usuario porque no he usado la autenticación! filtrar en mi controlador, porque quiero que los usuarios no registrados puedan verlo.

¿Cómo inicio sesión en un usuario si están en la sesión de lo contrario dejándolo sin un usuario?

+4

Si esta pregunta aún está activa, ¡Develar ahora siempre carga current_user para usted independientemente de usar authenticate_user! antes de filtro o no. – zykadelic

Respuesta

14

Puede usar user_signed_in? para agregar funcionalidad adicional en las vistas.

<% if user_signed_in? %> 
... for logged in users only and current_user is not nil here.... 
<% else %> 
... for anonymous users only and current_user is nil here.... 
<% end %> 
+2

Sí, excepto user_signed_in? puede ser verdadero y current_user puede ser nulo. Lo que quiero hacer es hacer que cargue el objeto current_user si alguien está conectado pero no si no lo está, y no requiere que el usuario sea autenticado. –

0

no ser quisquilloso, pero parece que ambos trabajan en los mismos lugares, es sólo que current_user no se ha inicializado si ningún usuario ha iniciado sesión.

aquí hay un trozo de una línea de una idea relacionada, que es de una before_filter la que prohíbe a los usuarios editar elementos que no pertenecen a ellos

user_signed_in? && (@subscription.user_id == current_user.id || current_user.admin) 

tienes que envuelva todo el rollo con un && en user_signed_in? sin embargo, o que se colgará cuando ningún usuario es Signe d en.

1

La única manera que puedo pensar para hacer esto es llamarlo cada vez que desea llamar usuario actual, que probablemente no es la mejor solución ... por lo que sería algo así como

if user_signed_in? 
#code for current_user 
else 
#code for no current_user object 
end 
1

Solo una nota rápida. Quería averiguar si un usuario administrador había iniciado sesión, y si es así proporcionar algunos enlaces útiles & información en la página de visualización pública, por lo que el administrador podría saltar rápidamente a la sección de administración para editar el recurso.

Sin embargo si genera el usuario como adminuser (siguiendo las instrucciones de Activación para ActiveAdmin) entonces el métodos user_signed_in? y current_user son admin_user_signed_in? y current_admin_user.

Así, por ejemplo, en una vista pública para mostrar un poste (vistas/mensajes/show.html.erb) puedo usar (simplificado para mayor claridad)

<div id='show_post_<%= @post.id %>'> 
    <h2><%= @post.title %></h2> 
    <div class='post_author'>by: <%= @post.author%></div> 
    <% if admin_user_signed_in? %> 
    <div class='admin_links'>Put links to admin pages for: 
     <%= current_admin_user.email %> 
    </div> 
    <% end %> 

    <div class='post_body'> 
     <%= raw @post.content %> 
    </div> 
</div> 

espero que se generarán los nombres de los métodos en función de lo que haya utilizado cuando configuró sus usuarios en ActiveAdmin o Devise (si llamó a su usuario modelo Vip, entonces el método sería vip_signed_in?).

+0

gracias por esto .. – baash05

Cuestiones relacionadas