Rails: ¿de dónde viene el infame "current_user"?


94

Recientemente he estado mirando Rails y he notado que hay muchas referencias a current_user. ¿Esto solo proviene de Devise? y ¿tengo que definirlo manualmente yo mismo incluso si uso Devise? ¿Existen requisitos previos para el uso current_user(como la existencia de sesiones, usuarios, etc.)?

Respuestas:


82

Está definido por varias gemas, por ejemplo, Devise

Deberá almacenar el user_id en algún lugar, generalmente en la sesión después de iniciar sesión. También asume que su aplicación tiene y necesita usuarios, autenticación, etc.

Normalmente, es algo como:

class ApplicationController < ActionController::Base
  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end
end

Esto supone que existe la clase de usuario, por ejemplo #{Rails.root}/app/models/user.rb.

Actualizado: evita consultas adicionales a la base de datos cuando no hay un usuario actual.


¿Son las sesiones algo así como un controlador / modelo de uso común con el fin de controlar el estado de inicio de sesión de un usuario? ¿O está integrado en rieles?
— bigpotato

sessionestá integrado en Rails. De forma predeterminada, utiliza una cookie para mantener el estado de un cliente entre solicitudes. Consulte guides.rubyonrails.org/security.html#sessions para obtener más información.
— Erik Peterson

2
NOTA: Si está leyendo esta respuesta, asegúrese de incluirla return unless session[:user_id]como se muestra en la respuesta de Zach; sin eso, cada if current_userverificación mientras esté desconectado activará otra consulta de base de datos.
— DreadPirateShawn

10

Sí, current_userusa session. Puede hacer algo similar en el controlador de su aplicación si desea implementar su propia autenticación:

def current_user
  return unless session[:user_id]
  @current_user ||= User.find(session[:user_id])
end

¿Son las sesiones algo así como un controlador / modelo de uso común con el fin de controlar el estado de inicio de sesión de un usuario? ¿O está integrado en rieles?
— bigpotato

1
sessiones algo así params, excepto que persiste para múltiples solicitudes. Puede usarlo para almacenar cualquier tipo de parámetro persistente exclusivo de sus usuarios individuales (hasta que su sesión expire o cierren la sesión). Puede leer más sobre esto aquí: ActionController: Acceso a la sesión
— Zach Kemp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.