2011-01-25 9 views
12

Aquí está mi situación, uso el diseño para permitir a los usuarios crear una cuenta en mi sitio y administrar su autenticación. Durante el proceso de registro, les permito a los clientes cambiar algunas opciones , lo que lleva a crear una cuenta realmente diferente, pero sigue basándose en el mismo recurso de usuario central. Me gustaría elegir no enviar un correo electrónico de confirmación para algunos de los tipos de cuenta de . No me importa si la cuenta no se confirma y el usuario no puede iniciar sesión, eso está bien, no hay pb con eso. ¿Cómo podría hacer eso? Gracias, AlexIdea: ¿Es posible NO enviar un correo electrónico de confirmación en casos específicos? (incluso cuando está confirmable está activo)

Respuesta

20

En realidad, es bastante fácil una vez que cavar un poco más profundo. Sólo anular un método en su modelo de usuario (o lo que sea que esté utilizando):

# Callback to overwrite if confirmation is required or not. 
    def confirmation_required? 
     !confirmed? 
    end 

Ponga sus condiciones y ha hecho trabajo!

Alex

+0

El correo no será enviado en un resend_confirmation o una send_reconfirmation, que son útiles ... –

+0

Wow .. ¡Hombre super genial! – knagode

5

yo era capaz de hacer algo similar con las funciones:

registrations_controller.rb

 
def build_resource(*args) 
    super 
    if session[:omniauth] # TODO -- what about the case where they have a session, but are not logged in? 
     @user.apply_omniauth(session[:omniauth]) 
     @user.mark_as_confirmed # we don't need to confirm the account if they are using external authentication 
     # @user.valid? 
    end 
    end 

Y luego, en mi modelo de usuario:

user.rb

 
    def mark_as_confirmed 
    self.confirmation_token = nil 
    self.confirmed_at = Time.now 
    end 
8

No sé si Diseñar añadió después se presentaron las otras respuestas, pero el código porque esto es justo allí en confirmable.rb:

# If you don't want confirmation to be sent on create, neither a code 
    # to be generated, call skip_confirmation! 
    def skip_confirmation! 
    self.confirmed_at = Time.now 
    end 
+1

Tenga en cuenta que debe llamar a esto antes de guardar al usuario; de lo contrario, se enviará el mensaje de "Instrucciones de confirmación". – dukedave

+2

También hay un método similar 'skip_reconfirmation! ' –

10

también puede simplemente añadir la siguiente línea de código en el controlador antes la creación del nuevo usuario:

@user.skip_confirmation! 
+0

Si está sobrecargando la acción' create' y usa 'super do | user |' para la personalización, ya es demasiado tarde para omitir, conciba el correo electrónico ya enviado. Esto debería ir en 'build_resource', por ejemplo. –

11

Si desea saltar enviar el correo electrónico, pero no hacer la confirmación, utilice:

# Skips sending the confirmation/reconfirmation notification email after_create/after_update. Unlike 
# #skip_confirmation!, record still requires confirmation. 
@user.skip_confirmation_notification! 

Si no quieren llamar a esto en su modelo con una devolución de llamada sobrescribir este método:

def send_confirmation_notification? 
    false 
end 
Cuestiones relacionadas