2012-11-23 42 views
14

最近我將confirmable模塊添加到我的用戶類。我的應用程序中已經有一個相當不錯的郵件系統(Sidekiq,Sendgrid ...),所以我創建了自己的「確認帳戶」郵件。現在的問題是禁止Devise發送默認電子郵件。有什麼辦法可以完全禁用Devise郵件系統嗎?禁用設計確認郵件

補充:

  • 我想保持confirmable模塊,因爲我使用它的屬性和路線。
  • 我不能使用skip_confirmation!,因爲我希望用戶確認他們的帳戶。
  • 我只是想禁用Devise郵件。

回答

35

使用源,盧克:

# 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 

所以在你的模型做什麼重寫此方法。

+0

很好的答案。謝謝! – Gawyn

+4

很高興幫助。如果你使用捆綁器,你可以隨時用'捆綁打開'來輕鬆查看任何寶石的源代碼,以便環顧四周。 – Thilo

3

我覺得剛剛從用戶模型中移除

:confirmable 

應該這樣做

或者你嘗試過禁用

config/environments/development.rb 

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

我需要可確認的模塊,因爲我在確認用戶。我使用設計提供給我的確認路線,以及User類的可確認屬性。我只是不想讓Devise發送郵件,因爲我想發送自己的郵件。 – Gawyn

+0

啊,我看到了,你不能只修改設計郵件,看看你想怎麼樣,似乎努力不使用內置的功能? – Richlewis

+0

看到更新的答案,可能會有效。 – Richlewis

3

使用skip_confirmation!方法保存任何對象之前。

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

我不想跳過確認。我只是想讓Devise不要發送郵件,因爲我正在發送自己的郵件。 – Gawyn

+0

@CristianPlanasGonzálezskip_confirmation!只會跳過設計確認方法而不是您自己的確認方法。請嘗試它,它會工作。 – Santosh

+0

skip_confirmation!將confir_at屬性設置爲Time.now,基本確認用戶。除了郵件,我正在使用所有Devise可確認模塊。 – Gawyn

7

嘗試重寫以下色器件方法模型:

def confirmation_required? 
    !confirmed? 
end 

或使用skip_confirmation!

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

這在導入種子數據時很有用。 – scarver2

1

我建議你

User.skip_reconfirmation!

這是跳過確認郵件和更新電子郵件不使用「確認!」

1

刪除(:confirmable)從設計模型 例如: - 在這裏我的設計模型是用戶 在這裏我用這個。

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

end