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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top