2010-10-21 8 views
32

Estoy trabajando en este servicio de alertas en Rails. Y realmente, todo lo que tengo que hacer es, cuando un usuario se registra, enviar un correo electrónico de confirmación al usuario. Y luego de la confirmación del usuario, active al usuario. Intenté jugar con el tutorial de activación de correo electrónico Authlogic de Matt Hooks, pero realmente no lleva a ninguna parte. Entonces, ¿alguna idea de cómo puedo hacer esto con el mínimo alboroto? Gracias!Confirmación de correo electrónico en Rails sin usar gemas/complementos de autenticación existentes

ACTUALIZACIÓN

Entonces, ¿cómo llegué idear para hacer el trabajo para mí es:

  1. Instalar la gema.

  2. Cree una migración para los campos confirmables del inventor.

  3. Especificar

    legado: confirmable en su modelo.

  4. Cree un método de confirmación en el controlador relevante (y una ruta para ese método) que actualice el atributo confirmed_at del modelo relevante.

  5. El generador de diseño crea algunas vistas para usted, una que es confirmation_instructions.html.erb. Personaliza la ruta allí.

Utilicé Rails 2.3.2 y he utilizado este método junto con la autenticación de Authlogic y funcionó bien. Yo planeo cambiar para idear completamente.

Honestamente, quería aceptar ambas respuestas (lamentablemente no puedo hacer eso), pero es solo que la solución de diseño parecía una solución más fácil.

+0

Podría comentar sobre por qué la respuesta de Maran:

class User < ActiveRecord::Base scope :certified, where(:certified => true) end 

Y luego, en su código? Me estoy preparando para hacer esto, pero estoy tratando de decidir entre hacerlo desde cero (respuesta de Paul) o con un complemento. Tal vez podrías compartir tu experiencia. – JnBrymn

+0

Claro, actualicé mi publicación y le expliqué cómo lo hice funcionar. – Shreyas

+0

@Shreyas, ¿entonces lo único que usó para diseñar fue para la confirmación de la cuenta? ¿Ya tenías la pieza de registro en su lugar? Pregunto porque ya tengo la pieza de registro trabajando en mi aplicación, pero me gustaría agregar confirmación, pero solo esa pieza. – Cas

Respuesta

70

Si se asume que le dio el título que se debe de evitar que concebir y Authlogic y amigos, aquí es lo que creo que hay que hacer:

  • Crear 'código de confirmación' y 'confirmado' atributos en su modelo de usuario.
  • Cree un nuevo método de controlador en su controlador de usuario que espera una identificación de usuario y un código de confirmación, busca al usuario y luego verifica si el código en el parámetro coincide con el código almacenado en la base de datos. Si es así, borra el código y establece confirmado = verdadero.
  • Crea una ruta que haga mapas, p./users/1/confirm/code a su nuevo método de controlador.
  • Cree una plantilla de ActionMailer para el correo electrónico que desea enviar. Esto debería aceptar a un usuario como parámetro y usar el código de confirmación del usuario para enviar un correo electrónico que contenga un enlace a su nueva ruta.
  • Cree un observador para su modelo de usuario. Si se crea el registro o se modifica la dirección de correo electrónico, genere un código de confirmación aleatorio, configúrelo en el modelo y borre la marca confirmada. Luego activa tu ActionMailer.
  • Cree un método auxiliar que permita a las vistas verificar si el usuario actual está confirmado.
  • Utilice este método para habilitar/deshabilitar la funcionalidad según corresponda.Recuerde proteger sus métodos de control según corresponda, así como su lógica de visualización.
+1

exactamente el consejo que necesitaba. ¡Gracias! : D –

+0

¿Por qué sugieres evitar a Devise a la activación por correo electrónico? Actualmente estoy teniendo el mismo problema y he ideado la autenticación pero mailgun para enviar correos electrónicos y actualmente estoy explorando mis opciones – tvieira

+0

@TiagoOrnelasVieira No sugiero evitar a Devise, pero la pregunta original especificaba que esto debería hacerse sin Devise/Authlogic. Parece que la pregunta ha sido actualizada. –

4

Devise es otra joya de autenticación excelente que viene con la creación de activación de correo electrónico, quizás podría intentarlo.

+0

idear es muy simple de instalar y hace exactamente lo que necesita. – s84

5

También puede utilizar los ámbitos para seleccionar usuarios. Se seleccionó

@user = User.certified.find_by_username(foo) 
Cuestiones relacionadas