2012-11-23 9 views
14

Niedawno dodałem moduł confirmable do mojej klasy User. W mojej aplikacji mam już całkiem niezły system pocztowy (Sidekiq, Sendgrid ...), więc utworzyłem własną pocztę potwierdzającą konto. Problem polega teraz na wyłączeniu programu Devise przed wysłaniem domyślnego adresu e-mail. Czy istnieje sposób całkowitego wyłączenia systemu pocztowego Devise?Wyłącz Devise Potwierdzalne wiadomości

Dodano:

  • Chcę utrzymać moduł confirmable, ponieważ używam jej atrybuty i tras.
  • Nie mogę użyć skip_confirmation!, ponieważ chcę, aby użytkownicy potwierdzili swoje konto.
  • Chcę tylko wyłączyć wiadomości Devise.

Odpowiedz

35

Użyj źródła, Luke:

# lib/devise/models/confirmable.rb 

# A callback method used to deliver confirmation 
# instructions on creation. This can be overriden 
# in models to map to a nice sign up e-mail. 
def send_on_create_confirmation_instructions 
    send_devise_notification(:confirmation_instructions) 
end 

więc zastąpić tę metodę w modelu nic nie robić.

+0

Świetna odpowiedź. Dzięki! – Gawyn

+4

Cieszę się, że pomogło. Jeśli używasz bundler, możesz zawsze spojrzeć na źródło każdego klejnotu z łatwością, otwierając pakiet "", aby się rozejrzeć. – Thilo

3

myślę tylko usunięcie

:confirmable 

z modelu użytkownika powinien to zrobić

lub próbowałeś wyłączenie

config/environments/development.rb 

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
+0

Potrzebuję modułu potwierdzającego, ponieważ potwierdzam użytkowników. Używam potwierdzanych tras, które mi dostarczają, a także potwierdzanych atrybutów klasy User. Po prostu nie chcę, żeby Devise wysłał pocztę, bo chcę wysłać własną. – Gawyn

+0

ah, widzę, czy nie można zmodyfikować programu pocztowego devise, aby sprawdzić, jak tego chcesz, czy nie starasz się nie korzystać z wbudowanych funkcji? – Richlewis

+0

zobacz zaktualizowaną odpowiedź, może działać. – Richlewis

3

Zastosowanie skip_confirmation! metoda przed zapisaniem dowolnego obiektu.

def create 
    @user = User.new(params[:user]) 
    @user.skip_confirmation! 
    @user.save! 
end 
+0

Nie chcę pomijać potwierdzenia. Chcę tylko, żeby Devise nie wysłał e-maila, ponieważ wysyłam własne. – Gawyn

+0

@ CristianPlanasGonzález skip_confirmation! będzie tylko pomijać metodę potwierdzania, a nie własną metodę potwierdzania. Spróbuj, to zadziała. – Santosh

+0

skip_confirmation!ustawia atrybut confirmed_at na Time.now, zasadniczo potwierdzając użytkownika. Używam całego modułu potwierdzającego moduł Devise, z wyjątkiem poczty. – Gawyn

7

Spróbuj nadrzędnymi następujące metody opracować w modelu:

def confirmation_required? 
    !confirmed? 
end 

lub użyj skip_confirmation!:

user = User.new(params) 
user.skip_confirmation! 
user.save! 
+1

Jest to pomocne podczas importowania danych początkowych. – scarver2

1

Polecam Ci

User.skip_reconfirmation!

To jest pominięcie potwierdzenia, aby wiadomość e-mail z aktualizacją nie była używana "potwierdź!"

1

usunąć (:confirmable) z opracowania modelu z: - tutaj mój opracować model jest Użytkownik tutaj użyłem jak to.

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable,:omniauthable 

end