2011-09-19 14 views
54

Zintegrowałem programowanie z Facebookiem. Teraz kiedy utworzyć konto użytkownika po zalogowaniu się użytkownika z jego/jej konta facebook,Wymyślić - utworzyć konto użytkownika z potwierdzeniem bez wysyłania wiadomości e-mail?

user = User.create(:email => data["email"], 
        :password => Devise.friendly_token[0,20]) 
    user.confirmed_at = DateTime.now 
    user.save! 

mimo że konto zostało potwierdzone, e-mail z potwierdzeniem nadal zwolniony. Masz pomysł, jak wyłączyć wysyłanie wiadomości e-mail?

+1

Usunąć ': potwierdzenie' z listy modułów przekazanych do opracowania w klasie użytkownika? Ponieważ w rzeczywistości go nie używasz. – numbers1311407

+1

dobrze, ale inni użytkownicy, którzy zarejestrują się w mojej witrynie, muszą być e-mailem potwierdzonym – disappearedng

+5

Myślę, że @disappeardng prosi o wyjątek. – user482594

Odpowiedz

125

Potwierdzenie oddzwonienia następuje po utworzeniu, więc dzieje się to w linii 1 w przykładzie, zanim ręcznie ustawisz confirmed_at.

Zgodnie z uwagami, najbardziej poprawną rzeczą do zrobienia byłoby użycie metody przewidzianej do tego celu, #skip_confirmation!. Ustawienie ręczne będzie działać ręcznie, ale obejdzie dostarczony interfejs API, którego należy unikać, gdy jest to możliwe.

Tak, coś takiego:

user = User.new(user_attrs) 
user.skip_confirmation! 
user.save! 

odpowiedź oryginalny:

jeśli przejdą confirmed_at wraz ze swoimi create argumentów, poczta nie powinna być wysłana jako sprawdzian, czy konto nie jest już "potwierdzone" to sprawdzenie, czy ta data jest ustawiona.

User.create(
    :email => data['email'], 
    :password => Devise.friendly_token[0,20], 
    :confirmed_at => DateTime.now 
) 

To, lub po prostu użyć new zamiast create budować swój rekord użytkownika.

+0

fyi Musiałem zadeklarować confirm_at jako attr_accessible (nie wiem, czy to potencjalne naruszenie bezpieczeństwa). Poza tym to działa! – disappearedng

+8

Użyj User.new i user.skip_confirmation! aby uniknąć konieczności potwierdzania dostępności. – waldo

+0

Używanie nowego nie działa, ponieważ wiadomość e-mail jest wysyłana, gdy zadzwonisz zapisać! Sugestia @ waldo na skip_confirmation działa jednak – Khash

9

Jeżeli chcesz tylko zapobiec wysyłaniu wiadomości e-mail, można użyć #skip_confirmation_notification, tak:

user = User.new(your, args) 
user.skip_confirmation_notification! 
user.save! 

Zobacz documentation

rezygnuje z przesłania powiadomienia e-mail z potwierdzeniem/potwierdzanie after_create/after_update. W przeciwieństwie do #skip_confirmation !, rejestracja wymaga potwierdzenia.

+0

To zadziałało dla mnie! Najlepsza odpowiedź nie. :(Dzięki! :) –

Powiązane problemy