Devise ignorando el método de creación personalizado

Los usuarios tienen que confirmar su cuenta de correo electrónico a través de un enlace enviado a ellos después de la inscripción a través del diseño confirmable.

Ahora mismo, si un usuario que no ha confirmado su cuenta recibe el error implacable:

Your email or password is incorrect.

He intentado añadir lo siguiente al Controlador de Reuniones:

def create
  user = User.where(email: params[:user][:email]).take
  unless user.confirmed?
    super
  end
  flash[:alert] = "Your account has not been confirmed."
end

Mis rutas son

  devise_for :users, path: 'users', controllers: {
    sessions: "users/sessions"
  }

Sin embargo, firmar como cualquier usuario (confirmado o no), parece evitar todo este método. (Incluso si me pongo en binding.pry)

UPDATE:

Devise solo ignora lo único create método. Si me pongo en un binding.pry en cualquier otro método (new o delete), idea lo atrapará.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por coderchampion


3 Respuestas:

  • Las sesiones crean no se llama si el usuario no está confirmado, por lo que es por eso que no es capaz de llegar al create método.

    Prueba esto.

    class User < ActiveRecord
      
      protected
      
      def confirmation_required?
        false
      end
    end
    

    Esto permitirá al usuario proceder al create medidas adoptadas sessions_controller y puede probar allí si el usuario está confirmado.

    Respondida el Dec 16, 2020 a las 21:28 - por bytebison

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando parece deberse a que Devise está manejando la creación de usuarios de forma predeterminada y no está pasando por tu método personalizado en el controlador. Para solucionar esto, puedes intentar sobrescribir el método create en el controlador de registro personalizado que Devise te permite definir.

    Asegúrate de tener un controlador de registros personalizado que herede del controlador de registros de Devise. Si tienes un controlador personalizado llamado RegistrationsController en una carpeta users, asegúrate de incluir la lógica de verificación de la cuenta de correo electrónico en el método create de este controlador.

    Aquí te dejo un ejemplo de cómo podrías modificar tu controlador personalizado:

    ruby
    class Users::RegistrationsController < Devise::RegistrationsController
      def create
        super do |resource|
          unless resource.confirmed?
            flash[:alert] = "Your account has not been confirmed."
            resource.errors.clear
            sign_out(resource)
            redirect_to root_path
          end
        end
      end
    end
    

    Además, deberás ajustar tus rutas para que apunten al controlador de registros personalizado que acabas de crear:

    ruby
    devise_for :users, path: 'users', controllers: {
      registrations: "users/registrations"
    }
    

    Con este enfoque, el método create personalizado en tu controlador de registros debería ser invocado cuando un usuario intente registrarse, permitiéndote realizar la lógica de verificación de la cuenta antes de crear el usuario.

    Espero que esta solución te ayude a resolver tu problema con Devise ignorando el método de creación personalizado. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 17, 2020 a las 21:29 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que Devise está llamando al método create de su controlador personalizado, pero no está pasando el argumento params. Esto hace que el método create no pueda acceder a los parámetros del formulario, lo que da como resultado el error "Correo electrónico o contraseña incorrectos".

    Para resolver este problema, debe pasar el argumento params al método create de su controlador personalizado. Puede hacer esto agregando lo siguiente a su controlador:

    
    def create
      super(params)
    end
    

    Esto pasará el argumento params al método create de Devise, lo que permitirá que su controlador personalizado acceda a los parámetros del formulario.

    Una vez que haya realizado este cambio, debería poder registrarse correctamente con un usuario que no ha confirmado su cuenta de correo electrónico.

    Respondida el Dec 17, 2020 a las 21:37 - por Gemini

    Votos positivos: 0 | Votos negativos: 0