ruby-on-rails - not - devise rails español
Restringir Diseñar recuperación de contraseña solo para ciertos usuarios (0)
Mi aplicación tiene un sistema de suscripción previa para permitir que los usuarios se suscriban sin contraseña.
Pero los usuarios maliciosos que no han finalizado su suscripción (= aún no tienen una contraseña) podrían seguir el proceso de recuperación de la contraseña para establecer una contraseña y evitar el proceso habitual de suscripción.
Así que me gustaría que Devise brinde recuperación de contraseña solo a los usuarios que son validados (es decir, los usuarios que finalizaron su suscripción).
Si un usuario no validado ingresa su correo electrónico para tratar de obtener una nueva contraseña, me gustaría mostrarle el error "correo electrónico no encontrado", como si no lo hubiera encontrado.
No encontré dónde reemplazar a Devise para agregar dicho alcance.
Este método de Recoverable
parece encajar pero no he podido personalizarlo:
# Attempt to find a user by its email. If a record is found, send new
# password instructions to it. If user is not found, returns a new user
# with an email not found error.
# Attributes must contain the user''s email
def send_reset_password_instructions(attributes={})
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
recoverable.send_reset_password_instructions if recoverable.persisted?
recoverable
end
Entonces, por el momento, eliminé el control de PasswordsController
pero esta no es una solución limpia.
class Users::PasswordsController < Devise::PasswordsController
def create
if resource_params[:email].present? && resource_class.registration_complete.where(email: resource_params[:email]).none?
self.resource = resource_class.new
self.resource.errors.add(:email, :not_found)
render :new
else
super
end
end
end