Underelete ACTS_AS_PARANOID EL USUARIO EN IDEDISE SIGN EN
-
29-10-2019 - |
Pregunta
Tengo una aplicación Rails 3.1.3 que usa devise
para la autenticación de los usuarios y los elimina suave con acts_as_paranoid
. Quiero que las cuentas se desanimen con la recreación de contraseñas, el registro del usuario y el inicio de sesión del usuario, por lo que si proporcionan un correo electrónico eliminado, lo tomo esa cuenta, lo hago en vivo nuevamente y luego continúe con la acción (recreación de contraseña o inicie sesión ).
Pero en el Users::SessionsController#create
Acción, después de la falta de cuenta del usuario, recibe un error no autorizado (pero el usuario ahora debe ser visible). El código es:
def create
# Take into account acts_as_paranoid deleted users
resource = resource_class.only_deleted.find_by_email(params[resource_name][:email])
resource.undelete! if resource
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
Si agrego un resource.reload
Llame después de la Undeletion, no cambia nada. Y si me registro nuevamente, el usuario normalmente se inicia sesión, ya que no se quedó en el intento anterior.
¿Por qué está pasando esto? ¿Cómo puedo deshacerme y iniciar sesión en un solo create
¿llamar?
Solución
Lo resolvió con el siguiente fragmento del código:
def create
# Take into account acts_as_paranoid deleted users
if (resource = resource_class.only_deleted.find_by_email(params[resource_name][:email]))
resource.undelete!
# Copied from Warden::Strategies database_authenticatable:
sign_in resource if resource.valid_password?(params[resource_name][:password])
end
super
end