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 adoptadassessions_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 carpetausers
, asegúrate de incluir la lógica de verificación de la cuenta de correo electrónico en el métodocreate
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 argumentoparams
. Esto hace que el métodocreate
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étodocreate
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étodocreate
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