2010-10-21 8 views
32

Sto lavorando a questo servizio di avviso in Rails. E davvero, tutto quello che devo fare è, quando un utente si iscrive, inviare una email di conferma all'utente. E dopo la conferma dell'utente, attivare l'utente. Ho provato a giocare con il tutorial di attivazione e-mail Authlogic di Matt Hooks, ma non porta da nessuna parte. Quindi, qualche idea su come posso farlo con il minimo sforzo? Grazie!Email di conferma in Rails senza usare gemme/plugin di autenticazione esistenti

UPDATE

Così come ho avuto inventare per fare il lavoro per me è:

  1. Installare la gemma.

  2. Creare una migrazione per i campi confermabili di Idea.

  3. Specificare

    devise: confermabile nel modello.

  4. Creare un metodo di conferma nel controller pertinente (e una route per tale metodo) che aggiornerebbe l'attributo confirm_at del modello rilevante.

  5. Il generatore di effetti crea alcune viste per te, una che è confirm_instructions.html.erb. Personalizza il percorso lì.

Ho usato Rails 2.3.2 e ho usato questo metodo insieme all'autenticazione di Authlogic e ha funzionato bene. Ho intenzione di passare a concepire completamente.

In tutta onestà, volevo accettare entrambe le risposte (purtroppo non posso farlo), ma è solo che la soluzione ideata sembrava una soluzione più semplice.

+0

Potrebbe commentare sul perché la risposta di Maran è stato selezionato? Mi sto preparando a farlo, ma sto cercando di decidere se farlo da zero (la risposta di Paul) o con un plug-in. Forse potresti condividere la tua esperienza. – JnBrymn

+0

Certo, ho aggiornato il mio post e spiegato come l'ho fatto funzionare. – Shreyas

+0

@Shreyas quindi l'unica cosa che hai escogitato era la conferma dell'account? Hai già inserito il pezzo di registrazione? Sto chiedendo perché ho già il pezzo di registrazione che funziona nella mia applicazione, ma vorrei aggiungere la conferma, ma solo quella parte. – Cas

risposta

70

Supponendo che dato il titolo che sicuramente vuole evitare Devise, Authlogic e gli amici, ecco cosa penso che devi fare:

  • Crea 'codice di conferma' e 'confermato' attributi nel modello utente.
  • Creare un nuovo metodo di controller sul controller utente che prevede un ID utente e un codice di conferma, controlla l'utente e quindi verifica se il codice nel parametro corrisponde al codice memorizzato nel DB. In tal caso, cancella il codice e imposta confirm = true.
  • Creare un percorso che mappa ad es./users/1/confirm/code al nuovo metodo del controller.
  • Creare un modello ActionMailer per l'e-mail che si desidera inviare. Questo dovrebbe accettare un utente come parametro e utilizzare il codice di conferma dell'utente per inviare una mail contenente un link alla tua nuova rotta.
  • Creare un osservatore per il modello utente. Se il record viene creato o l'indirizzo e-mail modificato, generare un codice di conferma casuale, impostarlo nel modello e cancellare la bandiera confermata. Quindi attiva il tuo ActionMailer.
  • Creare un metodo di supporto che consenta alle viste di verificare se l'utente corrente è stato confermato.
  • Utilizzare questo metodo per abilitare/disabilitare la funzionalità come appropriato.Ricordarsi di proteggere i metodi del controller in modo appropriato così come la logica di visualizzazione.
+1

esattamente il consiglio che mi serviva. Grazie! : D –

+0

Perché suggerisci di evitare Devise per l'attivazione dell'email? Attualmente sto avendo lo stesso problema e ho ideato per l'autenticazione ma mailgun per l'email e attualmente sto esplorando le mie opzioni – tvieira

+0

@TiagoOrnelasVieira Non sto suggerendo di evitare Devise, ma la domanda originale specificava che questo dovrebbe essere fatto senza Devise/Authlogic. Sembra che la domanda sia stata aggiornata. –

4

Devise è un altro gioiello di autenticazione eccellente fornito con l'attivazione dell'email incorporata, forse potresti provarlo.

+0

ideare è molto semplice da installare e fa esattamente quello che ti serve. – s84

5

È inoltre possibile utilizzare gli ambiti per la selezione degli utenti.

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

E poi nel codice:

@user = User.certified.find_by_username(foo) 
Problemi correlati