ruby-on-rails - signup - devise wiki
Retrasar o reenviar el correo electrónico de confirmación de Devise para usuarios creados manualmente (7)
Estoy usando Devise para permitir que los usuarios se registren tan bien como usar mi propio administrador de usuarios para crear usuarios manualmente. Cuando creo un usuario en el administrador, Devise envía una confirmación inmediatamente al nuevo usuario. Creo que esto se debe al hecho de que tanto el dispositivo como mi administrador usan el mismo modelo. ¿Cómo demoro este correo electrónico hasta que el administrador esté listo para enviarlo?
Además, la validación de Devise requiere que el administrador establezca una contraseña para el nuevo usuario. Preferiría que los usuarios creados manualmente especifiquen su propia contraseña cuando respondan a la confirmación. En este momento, los usuarios creados manualmente no sabrán su contraseña a menos que yo también los envíe en un correo electrónico complementario.
@ user.skip_confirmation! confirma al usuario, por lo que el usuario puede iniciar sesión sin utilizar la confirmación.
Esto me funciona en el dispositivo 3.5.
Detenga el dispositivo para enviar un correo electrónico de confirmación mientras crea el usuario.
@user.skip_confirmation_notification!
Enviar instrucciones de confirmación más tarde.
@user.send_confirmation_instructions
¿Utiliza trabajo retrasado ? Le permite definir métodos individuales para la ejecución retrasada.
Acabo de pasar un tiempo investigando esto, básicamente solo necesitas agregar esto y configurar delayed_job .
def send_confirmation_instructions
generate_confirmation_token! if self.confirmation_token.nil?
::Devise.mailer.delay.confirmation_instructions(self)
end
Agréguelo a su modelo de usuario como método protegido para anular el de uno en confirmable . Además, tenga en cuenta que la gema se acaba de actualizar para agregar un nuevo método que se anulará en la creación que envía las instrucciones de confirmación .
Ahora está el proyecto de async de devise:
Ahora hay una forma más fácil (se agregó de nuevo en v2.2.4)
¡El módulo confirmable de Devise ahora incluye la perfecta notificación skip_confirmation_notification! Método que permite una solución más limpia:
@user = User.new params[:user]
@user.skip_confirmation_notification!
@user.save
# ... do stuff, then later...
Devise::Mailer.confirmation_instructions(@user).deliver
Hacemos esto en una de nuestras aplicaciones. Puede decirle a Devise que NO envíe automáticamente la confirmación de esta manera:
@user.skip_confirmation!
Y luego, más tarde, puedes hacer.
Devise::Mailer.confirmation_instructions(@user).deliver
Para Rails 2.x harías algo como:
DeviseMailer.deliver_confirmation_instructions(@user)
La solución no es tan simple como la respuesta de @Ryan Heneise. Si lo haces @user.skip_confirmation!
confirma al usuario, por lo que el usuario puede iniciar sesión sin utilizar la confirmación, por lo que la carta de confirmación en este caso es inútil. Esta solución no permite al usuario iniciar sesión sin la confirmación: Rails 3 with Devise for Authentication - ¿Cómo creo manualmente un usuario?