2011-05-18 66 views
4

我覆蓋設計的確認!方法來發送一個值得歡迎的消息,我的用戶:devise_invitable:邀請後確認

class User < ActiveRecord::Base 

    devise :invitable, :database_authenticatable, :registerable, :recoverable, 
     :rememberable, :confirmable, :validatable, :encryptable 

    # ... 

    # Devise confirm! method overriden 
    def confirm! 
    UserMailer.welcome_alert(self).deliver 
    super 
    end 

end 

隨着devise_invitable當用戶接受邀請,並設置自己的密碼確認!方法永遠不會觸發,是否有可能強制它? devise_invitable如何確認用戶?

或者我可以用相同的方式覆蓋accept_invite(或其他所謂的)方法嗎?

我希望受邀用戶保持未經確認,然後在接受邀請後確認。

謝謝,非常感謝任何幫助!

Original Source

UPDATE

翻翻devise_invitable model我發現這兩種方法誰可能會導致此不良行爲:

# Accept an invitation by clearing invitation token and confirming it if model 
    # is confirmable 
    def accept_invitation! 
    if self.invited? && self.valid? 
     self.invitation_token = nil 
     self.save 
    end 
    end 

    # Reset invitation token and send invitation again 
    def invite! 
    if new_record? || invited? 
     @skip_password = true 
     self.skip_confirmation! if self.new_record? && self.respond_to?(:skip_confirmation!) 
     generate_invitation_token if self.invitation_token.nil? 
     self.invitation_sent_at = Time.now.utc 
     if save(:validate => self.class.validate_on_invite) 
     self.invited_by.decrement_invitation_limit! if self.invited_by 
     !!deliver_invitation unless @skip_invitation 
     end 
    end 
    end 
+0

想通了:https://gist.github.com/982181 – 2011-05-20 01:39:13

回答

8
class User < ActiveRecord::Base 
    devise :invitable, :database_authenticatable, :registerable, :recoverable, 
     :rememberable, :confirmable, :validatable, :encryptable 

    # ... 

    # devise confirm! method overriden 
    def confirm! 
    welcome_message 
    super 
    end 

    # devise_invitable accept_invitation! method overriden 
    def accept_invitation! 
    self.confirm! 
    super 
    end 

    # devise_invitable invite! method overriden 
    def invite! 
    super 
    self.confirmed_at = nil 
    self.save 
    end 

private 

    def welcome_message 
    UserMailer.welcome_message(self).deliver 
    end 

end 
+0

很好,謝謝!就驗證而言,這只是一個小小的評論。 'accept_invitation!'可能不會產生有效的模型,例如如果受邀用戶接受邀請時密碼限制不符合。 'self.confirm!如果model.valid?'爲了解決這個問題,並且在驗證錯誤的情況下不讓歡迎電子郵件溜走。 – simonnordberg 2015-02-19 13:44:02

2

我試圖benoror的答案並在第一次出現工作 - 但是當你的用戶接受邀請並填寫表格無效,它實際上會覆蓋令牌無效的令牌。

相反,回調可以做到這一點:

class User < ActiveRecord::Base 

    devise :invitable, :database_authenticatable, :registerable, :recoverable, 
    :rememberable, :confirmable, :validatable, :encryptable 

    after_invitation_accepted :send_welcome_email 


    def send_welcome_email 
    end 

end 
+0

時代已更改。這是答案。謝謝@丹丹 – pjammer 2016-08-10 12:20:09

相關問題