tutorial signup sign_in rails method instalar example ejemplos ruby-on-rails ruby-on-rails-3 devise

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 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?