Potwierdzenie e-mail w Rails bez użycia istniejących klejnotów/wtyczek uwierzytelniających

Pracuję nad tym serwisem alarmującym w Rails. I naprawdę, wszystko, co muszę zrobić, to, gdy użytkownik zarejestruje się, wysłać e-mail z potwierdzeniem do użytkownika. I po potwierdzeniu przez użytkownika aktywować użytkownika. Próbowałem bawić się z samouczkiem aktywacji Authlogic e-mail Matta Hooksa, ale naprawdę prowadzi donikąd. Jakieś pomysły, Jak mogę to zrobić bez zamieszania ? Dzięki !

UPDATE

Więc jak namówiłem devise ' a do wykonania pracy za mnie to:

  1. Zainstaluj gem.

  2. Utwórz migrację dla potwierdzalnych pól devise.

  3. Określ

    Devise: confirmable w twoim modelu.

  4. Utwórz metodę confirm w odpowiednim kontrolerze (i trasę dla tej metody), która zaktualizowałaby atrybut confirmed_at odpowiedniego modelu.

  5. generator devise tworzy dla Ciebie kilka widoków, jednym z nich jest confirmation_instructions.html.erb. Dostosuj ścieżkę.

I used Rails 2.3.2 i ja użyłem tej metody wraz z uwierzytelnianiem Authlogic i działało dobrze. Planuję przełączyć się na devise całkowicie.

Szczerze mówiąc, chciałem zaakceptować obie odpowiedzi (niestety nie mogę tego zrobić), ale po prostu rozwiązanie devise wydawało się łatwiejsze.

Author: Shreyas, 2010-10-21

3 answers

Zakładając, że biorąc pod uwagę tytuł, którego zdecydowanie chcesz uniknąć Devise, Authlogic i przyjaciele, oto, co myślę, że musisz zrobić:

  • Utwórz atrybuty "kod potwierdzenia" i "potwierdzone" w modelu użytkownika.
  • Utwórz nową metodę kontrolera na kontrolerze użytkownika, która oczekuje identyfikatora użytkownika i kodu potwierdzającego, wyszukuje użytkownika, a następnie sprawdza, czy kod w parametrze pasuje do kodu przechowywanego w DB. Jeśli tak, to czyści kod i ustawia confirmed = prawda.
  • Utwórz trasę, która mapuje np./users/1/confirm / code do nowej metody kontrolera.
  • Utwórz szablon ActionMailer dla wiadomości e-mail, którą chcesz wysłać. To powinno zaakceptować użytkownika jako parametr i użyć kodu potwierdzającego użytkownika, aby wysłać wiadomość zawierającą link do nowej trasy.
  • Utwórz obserwatora dla swojego modelu użytkownika. Jeśli rekord zostanie utworzony lub adres e-mail zostanie zmodyfikowany, Wygeneruj losowy kod potwierdzający, ustaw go w modelu i wyczyść potwierdzona flaga. Następnie uruchom ActionMailer.
  • Utwórz metodę pomocniczą, która pozwala views sprawdzić, czy bieżący użytkownik jest potwierdzony.
  • Użyj tej metody, aby odpowiednio włączyć/wyłączyć funkcjonalność. Pamiętaj, aby odpowiednio chronić metody kontrolera oraz logikę widoku.
 70
Author: Paul Russell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-06 12:07:14

Można również skorzystać z zakresów do wyboru użytkowników.

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

A następnie w kodzie:

@user = User.certified.find_by_username(foo)
 5
Author: user1017926,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-25 16:20:16

Devise to kolejny doskonały klejnot uwierzytelniania, który jest dostarczany z wbudowaną aktywacją e-mail, być może mógłbyś spróbować.

 4
Author: Maran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-21 07:00:16