2011-05-11 11 views
5

Tengo un raíles 3 aplicación que utiliza el módulo Diseñar y confirmable. Sin embargo, evitar que los usuarios recién registrados accedan al sitio hasta que confirmen su correo electrónico está causando problemas de retención. En su lugar, nos gustaría otorgar acceso instantáneo al usuario y y aún así enviarle un correo electrónico de confirmación. A continuación, ejecutamos una tarea en segundo plano para bloquear a los usuarios que no han confirmado su correo electrónico dentro de un período de tiempo determinado.Idear suave Confirmación

¿Es esto posible con el módulo confirmable? ¿Hay alguna forma de crear un recurso activo (usuario) que no haya confirmado su correo electrónico con el módulo confirmable? ¿Algún consejo general sobre la implementación de esto?

Respuesta

4

Creo que se puede utilizar para especificar confirm_within una restricción de bloqueo. Puede habilitar esto cuando llame a devise_for.

http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable

Además, se puede optar por restringir ciertos comportamientos "sólo" a los usuarios confirmados por el control de la confirmados? estado de su modelo de usuario. Podrías hacer esto en el controlador, o usando CanCan, o lo que sea. Algunas tareas en su sitio probablemente no requieren confirmación; es probable que tenga más presente cuando el usuario interactúa con otras personas o puede utilizar su sitio para enviar determinadas notificaciones/correos electrónicos, etc.

+0

Gracias, esto parece que está lo que busco. – ghempton

+0

confirm_within está en desuso, utilice: allow_unconfirmed_access_for https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0 – gayavat

2

Para añadir un litte más detalle a la respuesta aceptada. Sí, puede usar confirm_within pero necesita hacer esto cuando llame al devise no devise_for.

class User 
    devise :database_authenticatable, :encryptable, :confirmable, :rememberable,  :timeoutable, :lockable, 
    :stretches => 15, :pepper => 'abcdef', :confirm_within => 5.days, 
    :remember_for => 7.days, :timeout_in => 15.minutes, :unlock_in => 10.days 
end 

El código anterior proviene de la prueba de modelos para idear

También puede establecer la configuración en el archivo config/initializers/devise.rb con config.confirm_within = 10.days

0

Hmm, creo que la bandera correcta sería allow_unconfirmed_access_for:

config.allow_unconfirmed_access_for = 5.days 

confirm_within solo especifica por cuánto tiempo es válido el token enviado por correo electrónico.

Más de config/initializers/devise.rb:

# ==> Configuration for :confirmable 
# A period that the user is allowed to access the website even without 
# confirming his account. For instance, if set to 2.days, the user will be 
# able to access the website for two days without confirming his account, 
# access will be blocked just in the third day. Default is 0.days, meaning 
# the user cannot access the website without confirming his account. 
# config.allow_unconfirmed_access_for = 2.days 

# A period that the user is allowed to confirm their account before their 
# token becomes invalid. For example, if set to 3.days, the user can confirm 
# their account within 3 days after the mail was sent, but on the fourth day 
# their account can't be confirmed with the token any more. 
# Default is nil, meaning there is no restriction on how long a user can take 
# before confirming their account. 
# config.confirm_within = 3.days